2013-06-12 83 views
1

之外我有一個JavaScript事件處理程序是這樣的:問題使用JavaScript事件處理程序變量的範圍

for (i = 0; i < x; i++){ 
var table = tableList[i]; 
var tableID = table.getAttribute('id'); 

var selector = table.querySelectorAll('input')[0]; 
selector.on('focusout', function(){ 
    alert(tableID); 
}): 
} 

的TABLEID警報始終處於tableList最後一個表的ID,無論哪個臺我的正在使用。

任何想法?

+2

的可能重複[關閉的Javascript內循環 - 簡單實用的例子(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Ian

+0

你有相同的'ID'應用於多個元素? –

+0

爲什麼'table.querySelectorAll(「input」)[0]'而不是'table.querySelector(「input」)'?另外,'selector'看起來像是一個用於引用元素的奇怪變量名稱。 'table.getAttribute(「id」)''可以是'table.id;'。 –

回答

1

您可以將tableID作爲數據對象附加到事件處理程序。嘗試以下操作。

selector.on('focusout', { tableID: tableID }, function(e) { 
    alert(e.data.tableID); 
}): 

根據jQuery文檔。

//data 
//Type: Anything 
//Data to be passed to the handler in event.data when an event is triggered.