从字符串动态创建按钮事件侦听器而不覆盖

时间:2018-04-16 20:43:13

标签: javascript jquery javascript-events event-handling deep-copy

我使用for循环用数组中的值填充HTML表。每行都需要一个链接到不同URL的按钮。

thisbutton.addEventListener("click", function(){ window.location.href = finalurl; });

字符串finalurl更改循环的每次迭代。但是它将它作为引用传递,因此在下一个循环中finalurl更改时,事件侦听器仍然与它绑定。这意味着页面上的每个按钮都链接到同一个URL。 我需要一种方法在该函数中传递一个克隆,到目前为止我发现的所有深度复制/克隆方法都需要我设置一个单独的变量,它不会有帮助,因为这也会过度写入。

提前致谢, 汤姆

1 个答案:

答案 0 :(得分:0)

当您使用任何异步代码时,使用for循环,尤其时,请注意使用letconst以避免提升。更好的是,完全避免for循环,而是使用数组函数,例如forEach

finalurl循环中声明for时,请执行以下操作:

const finalurl = '<insert url here>'

当您使用var时,变量会被提升到函数的顶部,因此一旦for循环结束,仍然只有一个finalurl被重新分配多次,finalurl与您附加的所有听众都看到的相同。

由于finalurl是一个原始字符串,它通过引用传递 - 这不是问题。