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

如何在Javascript中使用循环生成事件处理程序?

如何在Javascript中使用循环生成事件处理程序?

拉丁的传说 2019-06-18 17:13:41
如何在Javascript中使用循环生成事件处理程序?例如,我有10个从Ajax响应生成的标记:<a href="#" id="b1">b1</a><a href="#" id="b2">b2</a><a href="#" id="b3">b3</a><a href="#" id="b4">b4</a><a href="#" id="b5">b5</a> <a href="#" id="b6">b6</a><a href="#" id="b7">b7</a><a href="#" id="b8">b8</a><a href="#" id="b9">b9</a><a href="#" id="b10">b10</a>我需要通过循环将onClick事件分配给他们中的每一个:for(i=1; i<11; i++) {     document.getElementById("b"+i).onclick=function() {         alert(i);     }}这不起作用,它只分配给最后一个标签和警告“11”。我怎么才能让这个起作用?我宁愿不使用jQuery。
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

结束语是你想要的:

for(i=1; i<11; i++) {
    (function(i) {
        document.getElementById("b"+i).onclick=function() {
            alert(i);
        };
    })(i);}


查看完整回答
反对 回复 2019-06-18
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

在这个问题上有两种使用闭包的方法。这样做的目的是为事件处理程序使用的每个迭代创建一个带有“i”变量快照的范围。

解决方案1(正如Kevin提到的那样):

for(i=1; i<11; i++) {
    (function(num) {

       document.getElementById("b"+num).addEventListener('click', function() {
            alert(num);
       });

    })(i);}

解决方案2:

for (i=1; i<11; i++) {
    document.getElementById("b"+i).addEventListener('click', (function(){
        var num = i;
        return function() {
            alert(num);
        }
    })());}


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 540 浏览
慕课专栏
更多

添加回答

举报

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