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();

//  });

想把注释部分的点击事件做成数组循环来实现 ,但是点击没反应,求大腿告诉下怎么改


慕的地8271018
浏览 1368回答 1
1回答

鸿蒙传说

$("arr[i]") 改为 $(arr[i])。这里所有的 click 回调最终执行的都是$(att[i]).show().siblings().hide();而不是对应的 1, 2, 3 ,你可以在这里打印一下 i 你就知道了,按照你代码,这里应该就是打印的是 3 ,所以你哪个点击,最终都是调用&nbsp;$(att[3])&nbsp;这样的,这也就是闭包产生的影响。这里可以这么修改,把所有的 #penuse1 元素改为:<div&nbsp;class="penuse"&nbsp;data-idx="1"></div><div&nbsp;class="penuse"&nbsp;data-idx="2"></div><div&nbsp;class="penuse"&nbsp;data-idx="3"></div>这里的 data-idx 就对应你原本 id 中的序号。然后监听事件改为$('penuse').bind('click',&nbsp;function(){&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;index&nbsp;=&nbsp;$(this).data('idx'); &nbsp;&nbsp;&nbsp;&nbsp;$('#art-'&nbsp;+&nbsp;index).show().siblings().hide(); });就可以避免闭包的影响了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript