javascript使用for循环批量注册的事件不能正确获取索引值的解决方法


Posted in Javascript onDecember 20, 2014

本文实例讲述了javascript使用for循环批量注册的事件不能正确获取索引值的解决方法。分享给大家供大家参考。具体分析如下:

可能不少朋友会遇到一个问题,那就是当使用for循环批量注册事件处理函数,然后最后通过事件处理函数获取当前元素的索引值的时候会失败,先看一段代码实例:

<!DOCTYPE html>

<html>

<head>

<meta charset=" utf-8">

<meta name="author" content="https://3water.com/" />

<title>三水点靠木</title>

<style type="text/css">

li{

  width:240px;

  overflow:hidden;

  text-overflow:ellipsis;

  white-space:nowrap;

  font-size:12px;

  height:30px;

}

</style>

<script type="text/javascript">

window.onload=function(){

  var oLis=document.getElementsByTagName("li");

  var oshow=document.getElementById("show");

  for(var index=0;index<oLis.length;index++){

    oLis[index].onclick=function(){

      oshow.innerHTML=index;

    }

  }

}

</script>

</head>

<body>

<div id="show"></div>

<ul>

  <li>只有努力奋斗才会有美好的明天。</li>

  <li>分享互助是进步最大的源动力。</li>

  <li>每一天都是新的,要好好珍惜。</li>

  <li>没有人一开始就是高手,只有努力才有成长的可能</li>

  <li>只有当下的时间是可贵的,下一秒都是虚幻的</li>

</ul>

</body>

</html>

在上面的代码中,当点击li元素的时候弹出值始终是四,我们本来的想法是,点击li元素在div中显示当前li元素的索引值,下面就简单分析一下其中的原因。原因非常的简单,当for循环执行完毕以后,index的值已经变为四,于是也就出现了上面的现象。
代码修改如下:

<!DOCTYPE html>

<html>

<head>

<meta charset=" utf-8">

<meta name="author" content="https://3water.com/" />

<title>三水点靠木</title>

<style type="text/css">

li{

  width:240px;

  overflow:hidden;

  text-overflow:ellipsis;

  white-space:nowrap;

  font-size:12px;

  height:30px;

}

</style>

<script type="text/javascript">

window.onload=function(){

  var oLis=document.getElementsByTagName("li");

  var oshow=document.getElementById("show");

  for(var index=0;index<oLis.length;index++){

    oLis[index]._index=index;

    oLis[index].onclick=function(){

      oshow.innerHTML=this._index;

    }

  }

}

</script>

</head>

<body>

<div id="show"></div>

<ul>

  <li>只有努力奋斗才会有美好的明天。</li>

  <li>分享互助是进步最大的源动力。</li>

  <li>每一天都是新的,要好好珍惜。</li>

  <li>没有人一开始就是高手,只有努力才有成长的可能</li>

  <li>只有当下的时间是可贵的,下一秒都是虚幻的</li>

</ul>

</body>

</html>

上面的代码实现了我们的要求,当然也可以使用闭包的方式,代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset=" utf-8">

<meta name="author" content="https://3water.com/" />

<title>三水点靠木</title>

<style type="text/css">

li{

  width:240px;

  overflow:hidden;

  text-overflow:ellipsis;

  white-space:nowrap;

  font-size:12px;

  height:30px;

}

</style>

<script type="text/javascript">

window.onload=function(){

  var oLis=document.getElementsByTagName("li");

  var oshow=document.getElementById("show");

  for(var index=0;index<oLis.length;index++){

    (function(index){

      oLis[index].onclick=function(){

        oshow.innerHTML=index;

      }

    })(index)

  }

}

</script>

</head>

<body>

<div id="show"></div>

<ul>

  <li>只有努力奋斗才会有美好的明天。</li>

  <li>分享互助是进步最大的源动力。</li>

  <li>每一天都是新的,要好好珍惜。</li>

  <li>没有人一开始就是高手,只有努力才有成长的可能</li>

  <li>只有当下的时间是可贵的,下一秒都是虚幻的</li>

</ul>

</body>

</html>

希望本文所述对大家基于javascript的web程序设计有所帮助。

Javascript 相关文章推荐
提高网站信任度的技巧
Oct 17 Javascript
js取滚动条的尺寸的函数代码
Nov 30 Javascript
快速查找数组中的某个元素并返回下标示例
Sep 03 Javascript
JavaScript中闭包之浅析解读(必看篇)
Aug 25 Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 Javascript
jQuery html表格排序插件tablesorter使用方法详解
Feb 10 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
May 20 Javascript
element-ui 文件上传修改文件名的方法示例
Nov 05 Javascript
JavaScript中的this/call/apply/bind的使用及区别
Mar 06 Javascript
Javascript call及apply应用场景及实例
Aug 26 Javascript
Node.js实现批量去除BOM文件头
Dec 20 #Javascript
javascript删除一个html元素节点的方法
Dec 20 #Javascript
Node.js中调用mysql存储过程示例
Dec 20 #Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 #Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 #Javascript
jquery图片播放浏览插件prettyPhoto使用详解
Dec 19 #Javascript
js中匿名函数的创建与调用方法分析
Dec 19 #Javascript
You might like
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
PHP修改session_id示例代码
2014/01/08 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
document.write的几点使用心得
2014/05/14 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
javascript实现数独解法
2015/03/14 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
Python实现二分查找算法实例
2015/05/26 Python
Python3.6正式版新特性预览
2016/12/15 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
python 实现图片裁剪小工具
2021/02/02 Python
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
策划助理岗位职责
2013/11/18 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
大班下学期个人总结
2015/02/13 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android