• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

javascript 搞代码 7年前 (2018-06-13) 163次浏览 已收录 0个评论

前几天工作中写前端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对象。

http://www.gaodaima.com/30563.html

欢迎大家阅读《JS闭包中的循环绑定处理程序_js》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:JS闭包中的循环绑定处理程序_js

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址