javascript - 我怎样才能在一个循环中扭转这个困惑局面?

标签 javascript for-loop

我想在一个循环中更改这段很长的代码:请帮助我。

itemAll[0].addEventListener('click', function () {
    klik(0)
}, false);
itemAll[1].addEventListener('click', function () {
    klik(1)
}, false);
itemAll[2].addEventListener('click', function () {
    klik(2)
}, false);
itemAll[3].addEventListener('click', function () {
    klik(3)
}, false);
itemAll[4].addEventListener('click', function () {
    klik(4)
}, false);
itemAll[5].addEventListener('click', function () {
    klik(5)
}, false);
itemAll[6].addEventListener('click', function () {
    klik(6)
}, false);
itemAll[7].addEventListener('click', function () {
    klik(7)
}, false);
itemAll[8].addEventListener('click', function () {
    klik(8)
}, false);
itemAll[9].addEventListener('click', function () {
    klik(9)
}, false);
itemAll[10].addEventListener('click', function () {
    klik(10)
}, false);
itemAll[11].addEventListener('click', function () {
    klik(11)
}, false);

我已经尝试过这个,但似乎不起作用,我真的不明白为什么:

for (var i = 0; i < itemAll.length; i++) {
    var item = itemAll[i];
    item.addEventListener('click', function (item) {
        klik(item);
    })
}

无论如何,谢谢您的宝贵时间,我希望有人能帮我解决这个问题。

最佳答案

您可以使用.forEach():

itemAll.forEach(function(item, i) {
  item.addEventListener("click", klick.bind(undefined, i));
});

更好的是,您可以确保您正在使用的所有元素都有一个公共(public)类,然后只需在文档级别绑定(bind)一个事件处理程序来处理点击并检查目标元素的类。 (基本上,jQuery 允许的“事件委托(delegate)”。)

关于javascript - 我怎样才能在一个循环中扭转这个困惑局面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659027/

相关文章:

javascript - 连续点击某个类别后隐藏所有行

java - 键为字符串、值为包含元素迭代问题的 ArrayList 的 Hashmap

javascript - 为什么 "current in mailArchive"应该成为关闭的条件?

javascript - 弹出 jQuery 模态后自动向上滚动

php - 在 PHP block 内使用 Javascript 设置 HTML 文本框的值(使用 echo)

javascript - 带有PNG文件的AngularJS素材图标

java - 如何在一个长的for循环中清空所有变量,避免程序内存不足?

arrays - 如何正确设置 for 循环以每侧显示 1 个图像

php - 逗号在for循环的第一个参数中起什么作用?

javascript - 作用域的动态变量名