2014-11-02 25 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