码迷,mamicode.com
首页 > Web开发 > 详细

js,addEventListener参数传递

时间:2015-08-20 12:46:21      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

解决方法

因为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‘);

};

js,addEventListener参数传递

标签:

原文地址:http://www.cnblogs.com/wqing/p/4744611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!