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. 土壤生物和生化专业委员会暨土壤生物与土壤健康研讨会(杭州5月8-11)
  2. STS Eclipse IDEA 指定启动JDK版本
  3. 二叉排序树的建立、先序/中序/后序遍历、查找
  4. 每天九点十分开始每半小时一次执行一个cron_趣讲 PowerJob 超强大的调度层,开始表演真正的技术了...
  5. SAP中ABAP格式与JSON格式互转方法研究
  6. Python之实现一个简易计算器
  7. 同居1月 VS 同居1年,太真实了...
  8. Linux允许61440端口,释放对某端口的占用
  9. 一加7海外提前上架 骁龙855+12GB超大内存
  10. Debug模式启动tomcat超时
  11. Eclipse 中 工程 引用 其他 工程的 配置方法。
  12. Java的重写equals但不重写hashCode方法的影响
  13. kafka consumer 的配置(五)
  14. SQL调优技巧:统计信息(文末福利)
  15. JavaScript语法(三)
  16. Android实现 Eq的频响曲线,可以调节峰值,高低通。曲线为算法实现。
  17. Meltdown漏洞分析
  18. mysql auto.cnf_MySQL之my.cnf配置
  19. Tony.SerialPorts.RS232简介
  20. 瑞星微RK3288 开发板

热门文章

  1. 1956年 墨尔本 第十六届奥运会
  2. 《JavaScript DOM 编程艺术》知识点整理
  3. 表驱动法(更优雅的写if-else、switch-case)
  4. gd32 定时器时钟_GD32VF103之定时器最小配置
  5. SpringBoot 返回xml格式
  6. 《皇室战争》体验报告:游戏时长被无限拉长
  7. perl——当split函数用空格做分隔符时
  8. fcrackzip猜解zip密码
  9. linux sed 制表符,在sed中插入制表符的正确方法是什么?
  10. 99分位、95分位计算 实时分位数的统计方法