代码之家  ›  专栏  ›  技术社区  ›  Thomas Mathews

从字符串动态创建按钮事件监听器,而不覆盖[重复]

  •  0
  • Thomas Mathews  · 技术社区  · 7 年前

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

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

    字符串 finalurl 更改循环的每个迭代。但是它将其作为引用传递,以便 最终 在接下来的循环中,事件侦听器仍然与之绑定。这意味着页面上的每个按钮都会链接到相同的URL。

    我需要一种在该函数中传递克隆的方法,到目前为止,我找到的所有深度复制/克隆方法都需要我设置一个单独的变量,这没有帮助,因为这也会导致过度写入。

    1 回复  |  直到 4 年前
        1
  •  0
  •   CertainPerformance    7 年前

    使用时 for 循环, 尤其地 当您使用任何异步代码时,请注意使用 let const 避免吊装。更好的是,避免 对于 完全循环,并改用数组函数,例如 forEach

    声明时 finalurl 在您的 对于 循环,执行以下操作:

    const finalurl = '<insert url here>'
    

    当您使用 var ,变量被提升到函数的顶部,因此一旦 对于 循环完成后,仍然只有一个 最终 已经多次被重新分配任务 最终 与您连接的所有侦听器看到的相同。

    自从 最终 是一个基本字符串 通过引用传递-这不是问题所在。