gpt4 book ai didi

javascript - 在具有各种监听器的 for 循环中使用 addEventListener()

转载 作者:行者123 更新时间:2023-11-30 08:24:36 26 4
gpt4 key购买 nike

我正在尝试使用 for 循环将监听器添加到多个按钮。每个按钮的适当监听器由按钮的 ID 属性指示。按钮 ID 遵循“button-[listenerName]”的形式。我使用 querySelectorAll() 获取所有按钮元素的列表,然后遍历该列表,从每个按钮元素的名称中切出每个监听器的名称。然后,我将监听器的名称与 addEventListener() 结合使用,试图将该按钮与其监听器相关联。

<!DOCTYPE html>
<html>
<body>

<button id="button-listener1">Try 1</button>
<button id="button-listener2">Try 2</button>
<button id="button-listener3">Try 3</button>
<button id="button-listener4">Try 4</button>

<p id="demo"></p>

<script>

var selector = "[id^=button]";
var allButtons = document.querySelectorAll(selector);
for (var button of allButtons) {
var listenerName = button.id.slice(button.id.lastIndexOf("-")+1);
button.addEventListener("click", listenerName);
}

var listener1 = function() {
document.getElementById('demo').innerHtml = "1";
}

var listener2 = function() {
document.getElementById('demo').innerHtml = "2";
}

var listener3 = function() {
document.getElementById('demo').innerHtml = "3";
}

var listener4 = function() {
document.getElementById('demo').innerHtml = "4";
}

</script>

</body>
</html>

不幸的是,它不起作用。那是怎么回事?谢谢。

最佳答案

您的代码有 3 个问题:

  1. 在您的 for 循环中,您实际上是将字符串附加为事件监听器。您需要从您拥有的字符串访问您的事件监听器。

由于您的事件监听器是在全局范围内声明的,您可以使用 window 来访问它们:

button.addEventListener("click", window[listenerName]);
  1. 您在声明事件监听器之前附加它们。您需要在 for 循环之前声明 listener1

  2. innerHtml 不存在。正确的语法是 innerHTML

这是一个工作示例:

<!DOCTYPE html>
<html>
<body>

<button id="button-listener1">Try 1</button>
<button id="button-listener2">Try 2</button>
<button id="button-listener3">Try 3</button>
<button id="button-listener4">Try 4</button>

<p id="demo"></p>

<script>

var listener1 = function() {
document.getElementById('demo').innerHTML = "1";
}


var listener2 = function() {
document.getElementById('demo').innerHTML = "2";
}

var listener3 = function() {
document.getElementById('demo').innerHTML = "3";
}

var listener4 = function() {
document.getElementById('demo').innerHTML = "4";
}

var selector = "[id^=button]";
var allButtons = document.querySelectorAll(selector);
for (var button of allButtons) {
var listenerName = button.id.slice(button.id.lastIndexOf("-")+1);
button.addEventListener("click", window[listenerName]);
}
</script>

</body>
</html>

关于javascript - 在具有各种监听器的 for 循环中使用 addEventListener(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47706655/

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