从字符串动态创建按钮事件侦听器而不覆盖
Dynamically create button event listeners from a string without overwriting
我正在使用 for 循环用数组中的值填充 HTML table。每行需要一个链接到不同 URL.
的按钮
thisbutton.addEventListener("click", function(){ window.location.href = finalurl; });
字符串finalurl
改变循环的每次迭代。但是它将它作为引用传递,因此当 finalurl
在下一个循环中发生变化时,事件侦听器仍然与它相关联。这意味着页面上的每个按钮都会链接到相同的 URL.
我需要一种在该函数内部传递克隆的方法,到目前为止我发现的所有深度 copying/cloning 方法都需要我设置一个单独的变量,这没有帮助,因为这会覆盖还有。
使用 for
循环时,尤其是 当您使用任何异步代码时,注意使用 let
或 const
避免吊装。更好的是,完全避免 for
循环,而是使用数组函数,例如 forEach
.
在 for
循环中声明 finalurl
时,执行如下操作:
const finalurl = '<insert url here>'
当你使用 var
时,变量被提升到函数的顶部,所以一旦 for
循环结束,仍然只有一个 finalurl
被重新分配多次,并且 finalurl
与您附加的所有听众所看到的相同。
因为 finalurl
是原始字符串,它 不会 通过引用传递 - 这不是问题。
我正在使用 for 循环用数组中的值填充 HTML table。每行需要一个链接到不同 URL.
的按钮thisbutton.addEventListener("click", function(){ window.location.href = finalurl; });
字符串finalurl
改变循环的每次迭代。但是它将它作为引用传递,因此当 finalurl
在下一个循环中发生变化时,事件侦听器仍然与它相关联。这意味着页面上的每个按钮都会链接到相同的 URL.
我需要一种在该函数内部传递克隆的方法,到目前为止我发现的所有深度 copying/cloning 方法都需要我设置一个单独的变量,这没有帮助,因为这会覆盖还有。
使用 for
循环时,尤其是 当您使用任何异步代码时,注意使用 let
或 const
避免吊装。更好的是,完全避免 for
循环,而是使用数组函数,例如 forEach
.
在 for
循环中声明 finalurl
时,执行如下操作:
const finalurl = '<insert url here>'
当你使用 var
时,变量被提升到函数的顶部,所以一旦 for
循环结束,仍然只有一个 finalurl
被重新分配多次,并且 finalurl
与您附加的所有听众所看到的相同。
因为 finalurl
是原始字符串,它 不会 通过引用传递 - 这不是问题。