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 正则替换 replace(regExp, function)用法
May 22 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
Apr 10 Javascript
js在ie下打开对话窗口的方法小结
Oct 24 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
canvas学习之API整理笔记(一)
Dec 29 Javascript
Angular Renderer (渲染器)的具体使用
May 03 Javascript
微信小程序实现顶部下拉菜单栏
Nov 04 Javascript
详解vue挂载到dom上会发生什么
Jan 20 Javascript
在node中使用jwt签发与验证token的方法
Apr 03 Javascript
在layui中select更改后生效的方法
Sep 05 Javascript
js实现小星星游戏
Mar 23 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 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中文验证码实现方法
2015/06/18 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
质检部岗位职责
2013/11/11 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
司考复习计划
2015/01/19 职场文书
管理失职检讨书范文
2015/05/05 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
python可视化大屏库big_screen示例详解
2021/11/23 Python
Python echarts实现数据可视化实例详解
2022/03/03 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技