js,addEventListener参数传递

解决方法

因为i相对匿名函数是外面的变量,就把循环绑定的时候,将i的值传入到匿名函数内,就可以了。因此需要在匿名函数(事件函数)外包裹一个匿名函数, 并立即执行


var elems = document.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { elems[i].addEventListener('click', (function (num) { return function (e){ e.preventDefault(); alert('I am link #' + num); } })(i), 'false'); };

如果执行点击事件的时候,最终的事件函数外层因为立即执行的匿名函数,函数体内已经存在了num变量,而这个num变量是每次循环的时候传入的i

另外一种解决方法没有用到闭包,而是给每个对象添加一个属性

var elems = document.getElementsByTagName('a');
for (var i = 0; i < elems.length; i++) {
    elems[i].num = i;
    elems[i].addEventListener('click', function (e) {
        e.preventDefault();
        alert('I am link #' + this.num);
    }, 'false');

};
原文地址:https://www.cnblogs.com/wqing/p/4744611.html