如何在 JavaScript 中复制变量?

2024-04-17

我有这个 JavaScript 代码:

for (var idx in data) {
    var row = $("<tr></tr>");
    row.click(function() { alert(idx); });
    table.append(row);
}

因此,我正在查看一个数组,动态创建行(创建单元格的部分被省略,因为它并不重要)。重要的是我创建了一个包含 idx 变量的新函数。

但是,idx 只是一个引用,因此在循环结束时,所有行都具有相同的功能,并且所有警报都具有相同的值。

我目前解决这个问题的一种方法是这样做:

function GetRowClickFunction(idx){
    return function() { alert(idx); }
}

在调用代码中我调用

row.click(GetRowClickFunction(idx));

这可行,但有点难看。我想知道是否有更好的方法来复制循环内 idx 的当前值?

虽然问题本身不是 jQuery 特有的(它与 JavaScript 闭包/作用域相关),但我使用 jQuery,因此如果可行的话,纯 jQuery 的解决方案是可以的。


您可以将该函数放入循环中:

for (var idx in data) {
  (function(idx) {
    var row = $("<tr></tr>");
    row.click(function() { alert(idx); });
    table.append(row);
  })(idx);
}

现在real我想给你的建议是停止像这样进行事件绑定并开始使用 jQuery“live”或“delegate”API。这样您就可以为表中的所有行设置一个处理程序。为每一行提供“idx”值作为“id”或“class”元素或其他元素,以便您可以在处理程序中将其拉出。 (或者我猜你可以把它藏在“数据”扩展中。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JavaScript 中复制变量? 的相关文章