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 相关文章推荐
jQuery获取父元素及父节点的方法小结
Apr 14 Javascript
JS操作JSON方法总结(推荐)
Jun 14 Javascript
BootStrap 模态框实现刷新网页并关闭功能
Jan 04 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
Js面试算法详解
Apr 08 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
Sep 26 Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
详释JavaScript执行环境与执行栈
Apr 02 Javascript
微信小程序云开发修改云数据库中的数据方法
May 18 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 Javascript
JavaScript实现缓动动画
Nov 25 Javascript
Vuex实现简单购物车
Jan 10 Vue.js
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禁止个别IP访问网站
2013/10/30 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
php中namespace及use用法分析
2016/12/06 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
跟老齐学Python之做一个小游戏
2014/09/28 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
对numpy中轴与维度的理解
2018/04/18 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
如何选择使用结构还是类
2014/05/30 面试题
中医药大学毕业生自荐信
2013/11/08 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
股东出资证明书范例
2014/10/04 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript
ICOM R71E和R72E图文对比解说
2022/04/07 无线电