js多个相同点击事件

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();
//  });
想把注释部分的点击事件做成数组循环来实现 ,但是点击没反应,求大腿告诉下怎么改
阅读 5.3k
2 个回答

$("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();
});

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

不止楼上的字符串和变量问题,还有闭包产生的问题,建议把函数中的$("arr[i]") 改为$(this)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题