gpt4 book ai didi

javascript - 向多个元素添加相同的事件监听器

转载 作者:行者123 更新时间:2023-12-02 17:33:00 27 4
gpt4 key购买 nike

我看到了类似的问题,但要么它们不够接近我想要的,要么就像它们各自的答案一样不清楚 - 让我们看看:

我拥有的:以下代码块:

        addEventListener("load", function() {
for(var x in document.getElementsByName("rbTipo")) {
document.getElementsByName("rbTipo")[x].addEventListener("change", function() {
if(document.getElementById("rbTipoA").checked) {
document.getElementById("painelAluno").style.display = "block";
document.getElementById("painelEscola").style.display = "none";
}
else if(document.getElementById("rbTipoE").checked) {
document.getElementById("painelAluno").style.display = "none";
document.getElementById("painelEscola").style.display = "block";
}
else {
document.getElementById("painelAluno").style.display = "none";
document.getElementById("painelEscola").style.display = "none";
}
});
}
});

它应该做什么:

  • 对于每个带有 name="rbTipo" 的 DOM 元素,将其添加到 change 监听器;
  • 更改第三方元素的 CSS 属性。

它做错了什么:

显然 doc[...]byName("rbTipo")[x] 没有选择元素本身。意味着x不是从getElementsByName返回的数组的当前迭代索引?

我尝试过的:

为每个 name="rbTipo" 元素提供自己的监听器。这似乎不合逻辑,因为我们正在讨论为多个元素做一些事情。没什么大不了的,因为我只有两个,但我会经常这样做,而且并不总是使用“只有两个”索引。

最佳答案

for(var x in document.getElementsByName("rbTipo"))

我不会指望 NodeLists/HTMLCollections 的可枚举性。 Better use array-style iteration .

此外,您不应重复查询,而应将集合存储在变量中。顺便说一句,您确实已经为每个元素提供了自己的监听器,但这有点不必要。

addEventListener("load", function() {
var rbTipos = document.getElementsByName("rbTipo"),
rbTipoA = document.getElementById("rbTipoA"),
rbTipoE = document.getElementById("rbTipoE"),
painelA = document.getElementById("painelAluno"),
painelE = document.getElementById("painelEscola");
function listener() {
if(rbTipoA.checked) {
painelA.style.display = "block";
painelE.style.display = "none";
} else if(rbTipoE.checked) {
painelA.style.display = "none";
painelE.style.display = "block";
} else {
painelA.style.display = "none";
painelE.style.display = "none";
}
}
for(var i=0; i<rbTipos.length; i++) {
rbTipos[i].addEventListener("change", listener);
}
});

关于javascript - 向多个元素添加相同的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886179/

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