浅谈JS闭包中的循环绑定处理程序


Posted in Javascript onNovember 09, 2014

前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件。就是这个问题让我整整调了一个下午。最后还是下班回家,上网查资料才知道怎么解决的。 (PS:之前也在《jQuery基础教程》第四版中看过讲循环绑定处理程序的内容,当时估计也没怎么用心看,所以没记起来。)

大神要是知道这类情况,可以关掉窗口,写这些主要是给像我一样的小白看的。谢谢!

先贴上错误的例子让大家看看。(例子里面用到jQuery,请导入jQuery库)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>循环绑定处理程序</title> 

<script src="js/jquery-2.1.1.min.js"></script> 

<script type="text/javascript"> 


$(function(){ 



for(var i=1;i<=4;i++){ 




$("#btn"+i).get(0).onclick=function(){ 





alert(i); 




} 



} 


}); 

</script> 

</head> 

<body> 

<button id="btn1">按钮1</button> 

<button id="btn2">按钮2</button> 

<button id="btn3">按钮3</button> 

<button id="btn4">按钮4</button> 

</body> 

</html>

 

这段代码运行之后,点击按钮,弹出的alert中显示数据几呢,我之前一直认为按钮1到按钮4,对应的alert中的数字也是1到4。要是你也这样想,那就错了。

点击每个按钮,alert中都是显示数字4,没想到吧!

现在写几种解决方案,共大家参考 !

第一种、编写一个function,在这个function中返回一个函数

<script type="text/javascript"> 
$(function(){ 


for(var i=1;i<=4;i++){ 



$("#btn"+i).get(0).onclick=btnClick(i);



} 

}); 

var btnClick=function(value){ 


return function(){ 



alert(value); 


} 

} 

</script>

第二种、使用立即调用函数表达式

(function(value){

//代码块

})(i)//这就是立即调用函数表达式

<script type="text/javascript"> 
$(function(){ 


for(var i=1;i<=4;i++){ 



$("#btn"+i).get(0).onclick=(function(value){ 




return function(){ 




alert(value); 



} })(i);



} 

}); 

</script>

 

第三种、使用jQuery的each函数

<script type="text/javascript"> 
$(function(){ 


$.each([1,2,3,4],function(index,value){ 




$("#btn"+value).get(0).onclick=function(){ 




alert(value); 



} 


}); 

}); 

</script>

使用上面三种情况,就可以避免一开始那个情况了。

其中get(0)指的是将jQuery对象转为DOM对象。

以上就是个人对JS闭包中的循环绑定处理程序的理解,分享给大家,希望能对小伙伴们有所帮助

Javascript 相关文章推荐
Javascript 判断 object 的特定类转载
Feb 01 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
Oct 10 Javascript
Javascript 面向对象(三)接口代码
May 23 Javascript
常用jQuery选择器总结
Jul 11 Javascript
JS实现不规则TAB选项卡效果代码
Sep 16 Javascript
js+html获取系统当前时间
Nov 10 Javascript
React diff算法的实现示例
Apr 20 Javascript
npm qs模块使用详解
Feb 07 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 Javascript
openlayers实现图标拖动获取坐标
Sep 25 Javascript
手写实现JS中的new
Nov 07 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 #Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 #Javascript
js 操作符汇总
Nov 08 #Javascript
jquery的总体架构分析及实现示例详解
Nov 08 #Javascript
jquery常用方法及使用示例汇总
Nov 08 #Javascript
JQuery遍历json数组的3种方法
Nov 08 #Javascript
JQuery中使用.each()遍历元素学习笔记
Nov 08 #Javascript
You might like
PHP设计聊天室步步通
2006/10/09 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
thinkphp分页实现效果
2016/10/13 PHP
php中数组最简单的使用方法
2020/12/27 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
Python子类继承父类构造函数详解
2019/02/19 Python
超简单的Python HTTP服务
2019/07/22 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
python爬虫---requests库的用法详解
2020/09/28 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
《圆明园的毁灭》教学反思
2014/02/28 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
名人演讲稿范文
2014/09/16 职场文书
Python实现byte转integer
2021/06/03 Python
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
Java数组与堆栈相关知识总结
2021/06/29 Java/Android