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 相关文章推荐
javascript面向对象编程代码
Dec 19 Javascript
js/jquery去掉空格,回车,换行示例代码
Nov 05 Javascript
搭建pomelo 开发环境
Jun 24 Javascript
使用JavaScript实现弹出层效果的简单实例
May 31 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
Jul 06 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
基于bootstrap的选择框插件icheck
Dec 23 Javascript
js 作用域和变量详解
Feb 16 Javascript
Angular路由ui-router配置详解
Aug 01 Javascript
原生js+ajax分页组件
Jan 30 Javascript
VueJS实现用户管理系统
May 29 Javascript
npm全局环境变量配置详解
Dec 15 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
PHP获取MAC地址的函数代码
2011/09/11 PHP
php class类的用法详细总结
2013/10/17 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
joomla组件开发入门教程
2016/05/04 PHP
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
javascript中this的四种用法
2015/05/11 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
12步教你理解Python装饰器
2016/02/25 Python
Python排序算法实例代码
2017/08/10 Python
python里运用私有属性和方法总结
2019/07/08 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python logging日志模块原理及操作解析
2019/10/12 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
30年同学聚会邀请函
2014/01/25 职场文书
2015年工程部工作总结
2015/04/30 职场文书
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
nginx lua 操作 mysql
2022/05/15 Servers