2013-06-12 85 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.