浅谈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 相关文章推荐
科讯商业版中用到的ajax空间与分页函数
Sep 02 Javascript
jquery 延迟执行实例介绍
Aug 20 Javascript
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
jQuery中document与window以及load与ready 区别详解
Dec 29 Javascript
javascript中数组的定义及使用实例
Jan 21 Javascript
Bootstrap实现input控件失去焦点时验证
Aug 04 Javascript
js仿淘宝评价评分功能
Feb 28 Javascript
JavaScript实现两个select下拉框选项左移右移
Mar 09 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
JavaScript中set与get方法用法示例
Aug 15 Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 Javascript
基于vue和bootstrap实现简单留言板功能
May 30 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
Smarty安装配置方法
2008/04/10 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
php利用cookie实现访问次数统计代码
2011/05/19 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
JS的反射问题
2010/04/07 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
python3.5仿微软计算器程序
2020/03/30 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Python中元组,列表,字典的区别
2017/05/21 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
python爬虫添加请求头代码实例
2019/12/28 Python
Python for循环与getitem的关系详解
2020/01/02 Python
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
毕业生的自我评价
2013/12/30 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书