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 相关文章推荐
asp.net HttpHandler实现图片防盗链
Nov 09 Javascript
jquery的Tooltip插件 qtip使用详细说明
Sep 08 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 Javascript
javascript实现的HashMap类代码
Jun 27 Javascript
javaScript中push函数用法实例分析
Jun 08 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
Aug 15 Javascript
AngularJS入门教程之链接与图片模板详解
Aug 19 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 Javascript
JavaScript中window和document用法详解
Jul 28 Javascript
浅谈vant组件Picker 选择器选单选问题
Nov 04 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
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
php发送post请求的三种方法
2014/02/11 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python中的index()方法使用教程
2015/05/18 Python
你真的了解Python的random模块吗?
2017/12/12 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
python实现IOU计算案例
2020/04/12 Python
印尼旅游网站:via
2017/11/12 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
武汉高蓝德国际.net机试
2016/06/24 面试题
酒店拾金不昧表扬信
2014/01/18 职场文书
留学推荐信写作指南
2014/01/25 职场文书
先进个人事迹材料
2014/01/25 职场文书
党员岗位承诺书
2014/03/25 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
销售口号霸气押韵
2015/12/24 职场文书
Python中requests做接口测试的方法
2021/05/30 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python