jq循环绑定点击事件造成闭包问题

需求:给每个带有tab类名的元素点击点击事件,点击时可以添加active类名,(用于样式切换),而且还需要返回当前元素对应的索引值:

方法一(出现闭包)

先引入jq
jq引入之后的获取dom的方式:
$(’.tab’) //获取到的是所有含有tab类名的元素,如果想要限制在某个区域内,可以再加个类名的限制。

$('.tab').each(function(index){$(this).on('click',function(){console.log(index);$('.tab').eq(index).addClass('active');})
})

执行上面的代码后,出现闭包问题:
也就是所有的元素点击时,都打印的index为最后一项的索引,而且也只有最后一项添加了active类名。

方法二(通过立即执行函数解决闭包问题,将索引值传递到立即执行函数中)

$('.tab').each(function(index){(function(index){$(this).on('click',function(){console.log(index);$('.tab').eq(index).addClass('active');})})(index)
})

通过给循环中的每一项都添加立即执行函数执行,可以解决闭包问题;此时:每一项的点击事件都是可以添加上active类名了,通过立即执行函数中的index将索引传递过去,完美解决问题!

方法三(通过bind的方式)

//监听左侧的点击事件

var tabArr = $('.tab');
for (var i = 0; i < tabArr.length; i++) {$(tabArr[i]).bind("click", { index: i }, clickHandler);
}
function clickHandler(event) {var i = event.data.index;$('.tab').eq(i).addClass('active');$('.tab').eq(i).siblings().removeClass('active');
}

完美解决!

jq遍历循环,给每个元素添加点击事件,并返回当前元素的索引值(闭包问题)相关推荐

  1. JQuery 动态生成元素添加点击事件

    页面代码 <html> ... <body> <div id="divBox"></div> <script> $(fu ...

  2. 为未来元素添加点击事件的两种写法

    哈哈哈,小七来了,对于经常搬砖撸代码的猴子们,一定会遇到给好多li(死的还是动态字符串拼接生成的(对未来元素添加不到事件的看之前写的事件委托))添加点击事件 第一种: var index=0; for ...

  3. js中怎么为同级元素添加点击事件

    事件件是javascript脚本语言的重要组成部分,因为有事件才使用户页面的体验更加的美好.元素添加事件是js语言中最基础的.我们可以为元素本身添加事件,也可以通过事件绑定和事件监听为元素的父元素和子 ...

  4. JavaScript实现动态添加的元素添加点击事件

    在页面开发过程中常常遇到需要动态添加元素,然后给这一元素绑定相关事件的情况,这种情况下一般需要给元素加上相关属性,然后写这些元素的事件函数即可.动态添加的元素怎么绑定事件呢? 原生JavaScript ...

  5. 给父元素添加点击事件时,获取到的 event.target 为子元素(point-events: none 的妙用)

    目录 场景 分析 解决 场景 使用 ion-select 组件时,点击下拉图标 点击事件的 event.target,不是图标本身的 DOM,而是图标子元素的 DOM 这会导致 popover 无法计 ...

  6. elementUI使用之table表格如何给行元素添加点击事件

    官方文档提供的event事件 在代码中绑定事件 在methods中写方法 好了,这样就可以实现了.

  7. 通过js动态为标签元素添加点击事件

    最近遇到了,就研究了下,总结了下: 我所知道的有如下几种方式: var submitSpan = document.getElementById("submitSpan");第一种 ...

  8. css中为伪元素增加点击事件和hover

    鼠标悬停在父元素上面时为伪类元素增加样式 <!-- html结构 --> <div class="father"></div><style ...

  9. 如何给Vue v-for循环渲染出的元素(导航栏) 批量添加点击事件 及 点击后添加css类样式 及 点击后路由跳转切换

    如何给Vue v-for循环渲染出的元素 批量添加点击事件 及 点击后添加css类样式 及 点击后路由跳转切换 能够实现或解决的问题 给Vue v-for循环出的元素批量添加点击事件,并以自己在数组中 ...

最新文章

  1. Java项目:茶叶售卖商城系统(java+SSM+JSP+EasyUi+mysql)
  2. python输出所有素数_Python实现输出某区间范围内全部素数的方法
  3. Linux(CentOS)中常用软件安装,使用及异常——MySQL, VmTools
  4. Eclipse Mylyn成为顶级项目
  5. Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
  6. PHP中过滤数组中的元素
  7. STL容器之deque
  8. Delphi 的绘图功能[9] - TextRect
  9. 人才盘点最佳实践:45页人才盘点的流程与方法,管理梯队模型
  10. imwrite函数 matlab_用matlab做一个脉动磁势分解的动画
  11. 为什么 C 语言仍然占据统治地位?
  12. 场论 梯度 旋度 散度
  13. tiny4412 linux-4.2 移植(十一)LCD驱动移植
  14. 【5G系列】Network Slicing学习总结(4)
  15. CCKS2020基于本体的金融知识图谱自动化构建技术评测第五名方法总结
  16. 功夫熊猫中英文字幕版好句子_了解熊猫中的带有复制警告的设置
  17. 新的开始,与大学告别
  18. IOS - iPhoneX 怎么进入 DFU 模式(刷机必备)?
  19. jquery.orgcharts插件的使用
  20. fluent meshing 和mesh模块案例分析对比

热门文章

  1. 试验设计与因果分析课程学习
  2. MyBatis中的reflection包(一)ObjectFactory,PropertyTokenizer, Invoker, Reflector
  3. C# 生成校验解析token
  4. Patran错误及修改方法学习记录
  5. 如何在word文档页面的左侧显示文档目录
  6. SQL Server2000 版本区别及安装图解
  7. 行走在2015路上,回首2014
  8. 2014年博创杯参赛历程记
  9. tongyuekeji123 实战 SQL Server 2008 数据库误删除数据的恢复
  10. php歌声美化_人声美化:人声后期处理方法