Javascript 使用变量';函数声明时而不是运行时的s值?
这应该是一个相当简单的问题,我已经遇到了足够多的问题,应该有一个明显的解决方案,但我认为我正在努力将它表达正确 我在JS/jQuery中运行一个循环,将函数绑定到特定元素的事件。由于元素是动态添加到页面的,我希望函数包含对它将要修改的特定元素的引用。下面显示了一个简化的示例,以及我正在使用的解决方案代码Javascript 使用变量';函数声明时而不是运行时的s值?,javascript,jquery,closures,Javascript,Jquery,Closures,这应该是一个相当简单的问题,我已经遇到了足够多的问题,应该有一个明显的解决方案,但我认为我正在努力将它表达正确 我在JS/jQuery中运行一个循环,将函数绑定到特定元素的事件。由于元素是动态添加到页面的,我希望函数包含对它将要修改的特定元素的引用。下面显示了一个简化的示例,以及我正在使用的解决方案代码 for (row = 0; row < numOfRows; row++) { $('#row' + row + ' input').keyup(function () {
for (row = 0; row < numOfRows; row++) {
$('#row' + row + ' input').keyup(function () {
alert($(this).parent().parent().get(0).id);
});
}
for(行=0;行
这里的问题是,为了获得对行的引用,而不是使用循环中使用的变量,我必须以冗长的方式将引用从行的ID中拉出(在上面的代码中,还有另一行将“row”从标识符中去掉,为清楚起见省略)
我想从事的工作类似于:
for (row = 0; row < numOfRows; row++) {
$('#row' + row + ' input').keyup(function () {
alert(row);
});
}
for(行=0;行
但是,这显然只返回要添加的最后一个元素的ID。我确信有一种简单的方法可以获取变量的值,而不是对它的引用,但我还没有遇到它。有人能帮忙吗?for(var row=0;rowfor (var row = 0; row < numOfRows; row++) {
(function(row) {
$('#row' + row + ' input').keyup(function() {
alert(row);
});
})(row);
}
(功能(世界其他地区){
$(“#行”+行+”输入“).keyup(函数(){
警报(世界其他地区);
});
})(世界其他地区);
}
这将创建一个新的闭包,因为该行作为函数参数传递,所以它与循环变量“分离”。您应该始终对循环变量使用
var
,即for(var row=0;row
@始终?我可以想出几个例子,在这些例子中,使用一个在别处被用作循环变量的var是很有用的。至少,除非它已经在外部范围中声明。我想说的是,你永远不应该让你的循环变量是全局的。这看起来很完美,这正是我所期待的那种简单的解决方案,谢谢!