gpt4 book ai didi

javascript - 如何在循环中添加带有局部变量的事件处理程序

转载 作者:行者123 更新时间:2023-12-02 23:00:59 25 4
gpt4 key购买 nike

我确信我曾经知道这一点,但我已经离开了一段时间,我再也无法弄清楚了。

假设我有一个按钮集合(“Button A”、“Button B”、“Button C”,由 .getElementsByClassName("button") 检索的 NodeList 表示。

我现在想向其中添加一个 EventHandler,它利用在创建处理程序时按值传递的一些局部变量。作为一个最小的示例,让我们使用:

for (var i = elems.length - 1; i >= 0; i--) {
var inner = elems[i].innerHTML;
elems[i].onclick = function(){window.alert("Clicked on "+inner+" which is element number "+i)};
}

这里想要的结果是,当点击按钮 B 时,我得到

Clicked on Button B which is element number 1

但是,所有按钮都会产生

Clicked on Button A which is element number -1

我明白为什么会发生这种情况,但是我需要如何更改代码才能实现前者?如果这是相关的,在最终的事件处理程序中,i 本身不会被使用,而是再次引用 elem[i],它将作为参数传递到处理程序中。

最佳答案

使用let声明变量。这将为变量创建一个 block 作用域,并在循环中保留正确的值:

for (let i = elems.length - 1; i >= 0; i--) {

演示:

let elems = document.querySelectorAll('button');
for (let i = elems.length - 1; i >= 0; i--) {
var inner = elems[i].innerHTML;
elems[i].onclick = function(){window.alert("Clicked on "+inner+" which is element number "+i)};
}
<button type="button">Button A</button>
<button type="button">Button B</button>
<button type="button">Button C</button>

关于javascript - 如何在循环中添加带有局部变量的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57787994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com