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继承之为什么要继承
Nov 10 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
通过伪协议解决父页面与iframe页面通信的问题
Apr 05 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
Vue.js每天必学之Class与样式绑定
Sep 05 Javascript
Jquery删除css属性的简单方法
Dec 04 Javascript
详解JavaScript RegExp对象
Feb 04 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
Mar 15 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
Jun 10 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 Javascript
vue自定义组件实现双向绑定
Jan 13 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
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
原生js实现随机点名
2020/07/05 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
Python数据分析之如何利用pandas查询数据示例代码
2017/09/01 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
flask session组件的使用示例
2018/12/25 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
《称象》教学反思
2014/04/25 职场文书
个人融资协议书
2014/10/02 职场文书
语文教师求职信范文
2015/03/20 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
在Python中如何使用yield
2021/06/07 Python
Python天气语音播报小助手
2021/09/25 Python