Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用变量';函数声明时而不是运行时的s值?_Javascript_Jquery_Closures - Fatal编程技术网

Javascript 使用变量';函数声明时而不是运行时的s值?

Javascript 使用变量';函数声明时而不是运行时的s值?,javascript,jquery,closures,Javascript,Jquery,Closures,这应该是一个相当简单的问题,我已经遇到了足够多的问题,应该有一个明显的解决方案,但我认为我正在努力将它表达正确 我在JS/jQuery中运行一个循环,将函数绑定到特定元素的事件。由于元素是动态添加到页面的,我希望函数包含对它将要修改的特定元素的引用。下面显示了一个简化的示例,以及我正在使用的解决方案代码 for (row = 0; row < numOfRows; row++) { $('#row' + row + ' input').keyup(function () {

这应该是一个相当简单的问题,我已经遇到了足够多的问题,应该有一个明显的解决方案,但我认为我正在努力将它表达正确

我在JS/jQuery中运行一个循环,将函数绑定到特定元素的事件。由于元素是动态添加到页面的,我希望函数包含对它将要修改的特定元素的引用。下面显示了一个简化的示例,以及我正在使用的解决方案代码

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是很有用的。至少,除非它已经在外部范围中声明。我想说的是,你永远不应该让你的循环变量是全局的。这看起来很完美,这正是我所期待的那种简单的解决方案,谢谢!