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

js多个相同点击事件

js多个相同点击事件

慕的地8271018 2018-09-08 13:09:58
var arr=['#penuse1','#penuse2','#penuse3'];      var att=['#art1','#art2','#art3'];      for(i=0;i<arr.length;i++){          $("arr[i]").bind('click',function(){              $("att[i]").show().siblings().hide();          });//        alert(arr[i]);      };      //  $("#penuse1").click(function () {//     $("#art1").show().siblings().hide();//  });//  $("#penuse2").click(function () {//      $("#art2").show().siblings().hide();//  });//  $("#penuse3").click(function () {//      $("#art3").show().siblings().hide();//  });想把注释部分的点击事件做成数组循环来实现 ,但是点击没反应,求大腿告诉下怎么改
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

$("arr[i]") 改为 $(arr[i])。

这里所有的 click 回调最终执行的都是

$(att[i]).show().siblings().hide();

而不是对应的 1, 2, 3 ,你可以在这里打印一下 i 你就知道了,按照你代码,这里应该就是打印的是 3 ,所以你哪个点击,最终都是调用 $(att[3]) 这样的,这也就是闭包产生的影响。

这里可以这么修改,把所有的 #penuse1 元素改为:

<div class="penuse" data-idx="1"></div><div class="penuse" data-idx="2"></div><div class="penuse" data-idx="3"></div>

这里的 data-idx 就对应你原本 id 中的序号。

然后监听事件改为

$('penuse').bind('click', function(){    var index = $(this).data('idx');
    $('#art-' + index).show().siblings().hide();
});

就可以避免闭包的影响了。


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号