如何在JavaScript中复制变量?
我有这个JavaScript代码:
for (var idx in data) { var row = $(" "); row.click(function() { alert(idx); }); table.append(row); }
所以我正在查看一个数组,动态创建行(我创建单元格的部分被省略,因为它并不重要)。 重要的是我创建了一个包含idx变量的新函数。
但是,idx只是一个引用,因此在循环结束时,所有行都具有相同的function,并且所有行都提醒相同的值。
我现在解决这个问题的一种方法是这样做:
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 = $(" "); row.click(function() { alert(idx); }); table.append(row); })(idx); }
现在,我想给你的真正建议是停止像这样的事件绑定,并开始使用jQuery“live”或“delegate”API。 这样,您可以为表中的所有行设置单个处理程序。 为每一行提供“idx”值作为“id”或“class”元素或其他东西,以便您可以在处理程序中将其拉出来。 (或者我猜你可以把它存放在“数据”expando中。)