2014-11-02 56 views
0

我正在使用createDocumentFragment()创建一个div。 Div是一张带有输入列表的表格。当你点击任何复选框时,我想触发警报('是')。当我添加事件时,它不会将其添加到输入中,但是使用Firefox时,它会在添加到表中时调用警报。问题添加事件与addEventListener输入文档中的片段

有人可以解释我做错了什么吗?


function deptFilter(rPattern) 
{  

var lclData = JSON.parse(rPattern);     
var loc = document.getElementById('show2');     
var arrayKeys = Object.keys(lclData);    

    var outputData; 
    var LCL_List 
    var LCLTables; 
    var LCLtd; 
    var LCLtr; 
    var LCLInput; 
    var LCLDiv; 



    var LCL_List = document.createDocumentFragment(document.createElement('DIV')); 
    LCL_List.id = 'LCLTable'; 



for(var x = 0; x < arrayKeys.length; x++) 
{ 

LCLDiv = LCL_List.appendChild(document.createElement('DIV')); 
LCLTables = LCLDiv.appendChild(document.createElement('TABLE'));         

       for(var y = 0; y < lclData[arrayKeys[x]].length; y++) 
       { 

        LCLtr = LCLTables.appendChild(document.createElement('TR')); 
        LCLtd = LCLtr.appendChild(document.createElement('TD')); 
        LCLInput = LCLtd.appendChild(document.createElement('INPUT')); 
        LCLInput.id = lclData[arrayKeys[x]][y]['Name']; 
        LCLInput.type='checkbox'; 
        LCLInput.addEventListener("click", alert("Yes"));  


       } 



     } 


     loc.appendChild(LCL_List); 



} 

回答

0

这是添加事件监听方式:

LCLInput.addEventListener("click", function() { 
    alert("Yes"); 
}); 
+0

为什么发布此代码,请描述这里发生了什么,以及它如何帮助解决问题。 – Hamad 2014-11-02 17:25:39

0

当您安装一个事件处理程序是这样的:你马上,然后执行alert()

LCLInput.addEventListener("click", alert("Yes")); 

将返回值传递给addEventListener()。这显然不是你想要的。相反,你需要通过一个函数引用的addEventListener,然后该函数将调用你的alert()晚些时候:

LCLInput.addEventListener("click", function(e) { 
    alert("Yes"); 
}); 

或者你可以定义一个名为功能,并通过只是它的名字:

function handleClick(e) { 
    alert("Yes"); 
} 

LCLInput.addEventListener("click", handleClick); 
+0

谢谢!这现在有道理。 – user3545420 2014-11-17 13:20:06