【发布时间】:2014-07-15 16:30:15
【问题描述】:
我在一个循环中通过 JQuery 将一个点击事件附加到一个元素(循环变量 i):
$('#id_'+i).click(function() {ItemClick(i)});
并在其他地方定义:
function ItemClick(x) {
alert(x);
}
正如预期的那样,由于关闭,这没有按预期工作。我希望为每个不同的点击事件显示不同的数字,而不是我只得到 i 的最后一个值。
我知道我需要将闭包中的 i 转换为某种与闭包范围无关的东西,但即使在尝试了各种示例之后,它也让我无法理解。如:
$('#id_'+i).click(function() {ItemClick(function(x){return x)(i))});
有没有一种简洁明了的方法?
编辑
查看副本后,我现在有两个答案(请关闭问题):
回答一个
$('#id_'+i).data('index',i);
$('#id_'+i).click(
function() {
ItemClick($(this).data('index'));
}
);
回答 B
$('#id_'+i).click(
function(index) {
return function () {
ItemClick(index)
};
}(i)
);
【问题讨论】:
-
不要使用增量
id属性。它会导致这样的头痛。使用通用类,并通过索引访问它们,或者如果需要,在data属性中添加标识符。
标签: javascript jquery events closures