这应该是一个非常简单的问题,我已经足够了解应该有一个明显的解决方案,但我认为我很难说出来。
我在JS / jQuery中运行一个循环,它将函数绑定到某些元素的事件。由于元素是动态添加到页面的,我希望函数包含对它将要修改的特定元素的引用。下面显示了一个简化示例,以及我正在使用的变通方法代码。
for (row = 0; row < numOfRows; row++) {
$('#row' + row + ' input').keyup(function () {
alert($(this).parent().parent().get(0).id);
});
}
这里的问题是,为了获得对行的引用,而不是使用循环中使用的变量,我必须以冗长的方式从行的ID中提取引用(在上面的代码中) ,然后有另一条线从标识符中删除“行”,为清楚起见省略。)
我想要工作的东西类似于:
for (row = 0; row < numOfRows; row++) {
$('#row' + row + ' input').keyup(function () {
alert(row);
});
}
但是,这显然只返回要添加的最后一个元素的ID。我确信有一个简单的方法来获取变量的值而不是对它的引用,但我还没有遇到它。有人可以帮忙吗?
答案 0 :(得分:8)
for (var row = 0; row < numOfRows; row++) {
(function(row) {
$('#row' + row + ' input').keyup(function() {
alert(row);
});
})(row);
}
这会创建一个新的闭包,因为该行作为函数参数传递,所以它与循环变量“分离”。