这应该是一个非常简单的问题,我已经遇到过很多次了,应该有一个明显的解决方案,但我认为我很难正确表达它。
我正在 JS/jQuery 中运行一个循环,将函数绑定(bind)到某些元素的事件。由于元素是动态添加到页面的,我希望该函数包含对其将要修改的特定元素的引用。下面显示了一个简化的示例,以及我正在使用的解决方法代码。
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。我确信有一种简单的方法可以只获取变量的值而不是对其的引用,但我只是还没有遇到过。有人可以帮忙吗?
最佳答案
for (var row = 0; row < numOfRows; row++) {
(function(row) {
$('#row' + row + ' input').keyup(function() {
alert(row);
});
})(row);
}
这会创建一个新的闭包,并且由于该行作为函数参数传递,因此它与循环变量“分离”。
关于javascript - 在函数声明时而不是运行时使用变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572347/