如果元素较多的时候,批量注册事件处理函数是一个非常便利的事情,但是这个操作往往在初学者中会出现一些问题,最为常见的一个就是,批量注册完毕之后,事件触发之后,如果按照元素的个数作为索引的话,总是显示最后一个索引。

先看一段代码实例:
   [ 其他 ] 运行代码    下载代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="https://www.51qianduan.com/" />
<title>51前端</title>
<script type="text/javascript">
window.onload=function(){
  var obox=document.getElementById("box");
  var lis=obox.getElementsByTagName("li");
  for(var i=0;i<lis.length;i++){
    lis[i].onclick=function(){
      alert(i);
   }
  }
}
</script>
</head>
<body>
<ul id="box">
  <li>51前端一</li>
  <li>51前端二</li>
  <li>51前端三</li>
  <li>51前端四</li>
</ul>
</body>
</html>
以上代码的本意是点击导航栏目的时候能够弹出对应栏目的索引值,但是弹出的确实栏目的数量。

出现以上问题的原因是,使用for循环注册时间处理函数的时候,全局变量i的最终值是4,所以最终弹出值是4。

解决方案一:
   [ 其他 ] 运行代码    下载代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="https://www.51qianduan.com/" />
<title>51前端</title>
<script type="text/javascript">
window.onload=function(){
  var obox=document.getElementById("box");
  var lis=obox.getElementsByTagName("li");
  for(var i=0;i<lis.length;i++){
    lis[i].index=i;
    lis[i].onclick=function(){
      alert(this.index);
   }
  }
}
</script>
</head>
<body>
<ul id="box">
  <li>51前端一</li>
  <li>51前端二</li>
  <li>51前端三</li>
  <li>51前端四</li>
</ul>
</body>
</html>
以上代码实现了我们的要求,实现方式非常的简单,就是将每一次循环时i的值赋给当前li的自定义属性index,弹出值就是当前li的自定义属性index的值,因为this是指向当前函数调用对象。

解决方案二:
   [ 其他 ] 运行代码    下载代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="https://www.51qianduan.com/" />
<title>51前端</title>
<script type="text/javascript">
window.onload=function(){
  var obox=document.getElementById("box");
  var lis=obox.getElementsByTagName("li");
  for(var i=0;i<lis.length;i++){
    (function(index){
      lis[index].onclick=function(){
        alert(index)
      }
    })(i)
  }
}
</script>
</head>
<body>
<ul id="box">
  <li>51前端一</li>
  <li>51前端二</li>
  <li>51前端三</li>
  <li>51前端四</li>
</ul>
</body>
</html>

代码描述:JavaScript批量注册事件 函数索引。JavaScript批量注册事件函数索引代码下载



123 163



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册



×
×
51前端

注册

×
绑定手机

请绑定手机号,在继续操作

×
单次下载支付

应付金额:279

支付完成后,回到下载页面,在进行下载

官方QQ群
意见反馈
qq群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到