2016-03-09 64 views
1

我在複選框上使用事件偵聽器,我需要能夠傳入索引。目前,它始終是保存指數爲2組數組的長度爲2如何將索引傳遞給addEventListener

for(var i = 0; i < groups.length; i++) { 
    var input1 = document.createElement('input'); 
    input1.type = "checkbox"; 
    input1.addEventListener('click', function() { 
     console.log(i); 
    }, false); 
} 
+0

你想計算點擊的發生嗎?在一個合適的'for'循環中,如果這就是'groups.length'的總和,那麼就可以得到2。問題是什麼?順便說一句,請提供HTML,或者我們會怎麼知道會發生什麼? – zer00ne

+0

我希望能夠將groups數組的當前索引傳遞給另一個函數。此代碼應爲組中包含對特定組的引用的每個項目創建一個「複選框」。 – Mardymar

回答

1
for(var i = 0; i < groups.length; i++) { 
    (function(){ 
    var parent = document.getElementById("sidebar-wrapper"); 
    var input1 = document.createElement('input'); 
    input1.type = "checkbox"; 
    input1.addEventListener('click', function() { 
     var j = i; 
     var iMinus1 = j-1; 
     console.log(j); 
     setSelectedGroups(this, groups[iMinus1]); 
    }, false); 
    })() 
} 

您的索引總是被保存爲兩個,因爲函數被異步調用。它不是在您定義事件偵聽器時檢查索引,而是在它被調用時。這意味着循環可能已經在您調用函數時被終止,因此它會將索引視爲最終值爲2.此代碼執行的是執行立即調用的函數,以便在您定義時指定索引事件監聽器被保存在一個閉包中,並返回到閉包。

+0

我創建了一個jsFiddle來測試這個,但控制檯沒有記錄任何東西。 https://jsfiddle.net/Mardymar/ynjebk28/ – Mardymar

+0

在那個JS小提琴中,我沒有看到一個單擊的元素,一個複選框。那是你所看到的嗎? – OceansOnPluto

+0

使用'let'更容易。 – 2016-03-09 02:39:30

相關問題