javascript - js多个相同点击事件
PHPz
PHPz 2017-04-11 12:54:35
[JavaScript讨论组]
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();
//  });
想把注释部分的点击事件做成数组循环来实现 ,但是点击没反应,求大腿告诉下怎么改
PHPz
PHPz

学习是最好的投资!

全部回复(2)
怪我咯

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

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

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

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

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

<p class="penuse" data-idx="1"></p>

<p class="penuse" data-idx="2"></p>

<p class="penuse" data-idx="3"></p>

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

然后监听事件改为

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

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

高洛峰

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号