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 相关文章推荐
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
js sort 二维数组排序的用法小结
Jan 24 Javascript
Node.js 条形码识别程序构建思路详解
Feb 14 Javascript
跨域资源共享 CORS 详解
Apr 26 Javascript
Mac下使用charles遇到的问题以及解决办法
Jan 10 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 Javascript
Angular实现的进度条功能示例
Feb 18 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
Dec 23 Javascript
JavaScript数组排序小程序实现解析
Jan 13 Javascript
JavaScript运动原理基础知识详解
Apr 02 Javascript
javascript开发实现贪吃蛇游戏
Jul 31 Javascript
解决vue请求接口第一次成功,第二次失败问题
Sep 08 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
ajax 的post方法实例(带循环)
2011/07/04 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
php编程每天必学之表单验证
2016/03/01 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
JavaScript Prototype对象
2009/01/07 Javascript
javascript 面向对象编程 function也是类
2009/09/17 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
JavaScript实现区块链
2018/03/14 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
python selenium firefox使用详解
2019/02/26 Python
详解python中的线程与线程池
2019/05/10 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
青年岗位能手事迹材料
2014/12/23 职场文书
死亡诗社观后感
2015/06/05 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android