gpt4 book ai didi

Javascript - 添加事件监听器时未定义的数组元素

转载 作者:搜寻专家 更新时间:2023-11-01 05:29:54 25 4
gpt4 key购买 nike

我是 javascript 的新手,我正在尝试获取 DOM 中的所有“td”元素并向它们添加点击事件。当代码完成执行时,我可以看到单元格数组中有 37 个元素,但是当我单击该元素时,无论单击哪个元素,我的控制台语句中都会显示“clicked td37 undefined”。我不知道出了什么问题,我们将不胜感激。

<script>
window.addEventListener("DOMContentLoaded", createEventListeners, false);

function createEventListeners() {
var cells = document.getElementsByTagName("td");
console.log(cells);

for (var i = 0; i < cells.length; i++) {
cells[i].addEventListener("click", function () {
console.log("clicked td" + i + " " + cells[i]);

}, false);
}

}
</script>

最佳答案

在循环结束时,i 的值将是cells.length,所以cells[i] 是未定义的。您需要将它们包装在一个函数中,以便 i 是您想要的值。阅读更多关于闭包的信息 here

function createEventListeners() {
var cells = document.getElementsByTagName("td");

for (var i = 0; i < cells.length; i++) {
(function(i) {
cells[i].addEventListener("click", function () {
console.log("clicked td" + i + " " + cells[i]);
}, false);
}(i));
}

关于Javascript - 添加事件监听器时未定义的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33817697/

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