2014-01-14 146 views
1

我正面臨着一個讓我瘋狂的問題。 我在遍歷一組元素。假設集合的大小爲N.在每次迭代中,我寫node.onclick = function() { handleClick(idx); };其中node是元素,idx是每次迭代都增加的全局變量。 我的目標是以這樣一種方式來監聽N個元素,當元素i(我屬於[0,N-1])被點擊時,handleClick(idx)被調用idx = i。 但是,調試顯示,無論哪個元素被點擊,在handleClick(idx)中,idx將始終等於N-1(最後一個值)。我也嘗試了與idx相同的局部變量。 我試圖創建一個全局數組節點[],它在每次迭代中都推新元素...Javascript onclick聽衆

如何將「onclick」偵聽器設置爲N個不同的元素,例如處理函數是相同的,但是該功能的說法有所不同? 如何做到這一點? 謝謝!

+0

當然它表明最後一個號碼,你使用* IDX是一個全局變量*。只需要一點時間調試,你就可以通過你自己來調試;) – DontVoteMeDown

回答

1

問題是由DontVoteMeDown描述,一個解決方案是創建一個像這樣的anoymous功能:

node.onclick = (function(idx) { 
    return function() { handleClick(idx); }; 
})(idx); 

這樣做是直接調用anoymous功能,所以在ID被複制到其中remeains內一個新變量匿名函數。

+0

這個解決方案對我來說很合適! Thaaaank你! – user2957378

1

嘗試

for(var i = 0; i<set.length; i++){ 
    set[i].onclick = function(){ 
     handleClick(i); 
    } 
}