为了账号安全,请及时绑定邮箱和手机立即绑定

addEventListener 绑定的方法传入参数不对

addEventListener 绑定的方法传入参数不对

芜湖不芜 2018-10-19 14:11:13
触发click方法的时候k的取值总是heart_group.length+1,我想要每次绑定的时候k分别等于循环中的参数 for(k=0;k<heart_group.length;k++){                heart_group[k].addEventListener("click",function(){                                                            clickHeart(k);                });
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

其原因主要是,es5中没有块级作用域,整个循环结束后,k的值为length,可以通过下面三种方法解决

//法1——闭包

for (k = 0; k < heart_group.length; k++) {

    heart_group[k].addEventListener("click", (function(k) {

        return function() {

            clickHeart(k);

        }

    })(k), false);

}

//法2——bind方法

for (k = 0; k < heart_group.length; k++) {

    heart_group[k].addEventListener("click", function() {

        clickHeart(k);

    }.bind(heart_group[k]),false);

}

//法3——对象属性

for (k = 0; k < heart_group.length; k++) {

    heart_group[k].index = k;

    heart_group[k].addEventListener("click", function() {

        clickHeart(this.k);

    },false);

}


查看完整回答
反对 回复 2018-11-18
  • 1 回答
  • 0 关注
  • 793 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信