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的IE和Firefox兼容性汇编
Jul 01 Javascript
跟我学习javascript的循环
Nov 18 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
Oct 12 Javascript
js经验分享 JavaScript反调试技巧
Mar 10 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
Sep 04 Javascript
vue 移动端注入骨架屏的配置方法
Jun 25 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
Jul 19 Javascript
JavaScript数组及常见操作方法小结
Nov 13 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 Javascript
JS如何寻找数组中心索引过程解析
Jun 01 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
php 远程关机操作的代码
2008/12/05 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
js 删除数组的几种方法小结
2014/02/21 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
Vue仿今日头条实例详解
2018/02/06 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
Python 文件和输入输出小结
2013/10/09 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
在django中,关于session的通用设置方法
2019/08/06 Python
pygame实现打字游戏
2021/02/19 Python
django实现类似触发器的功能
2019/11/15 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
统计员岗位职责
2013/11/14 职场文书
外贸实习生自荐信范文
2013/11/24 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
vscode中使用npm安装babel的方法
2021/08/02 Javascript
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
对讲机知识
2022/04/07 无线电