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 相关文章推荐
jquery创建div 实现代码
Apr 27 Javascript
基于jquery的表头固定的若干方法
Jan 27 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
javascript时间函数大全
Jun 30 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
jquery实现全选功能效果的实现代码
May 05 Javascript
深入理解node exports和module.exports区别
Jun 01 Javascript
jQuery页面加载初始化的3种方法(推荐)
Jun 02 Javascript
js评分组件使用详解
Jun 06 Javascript
微信小程序返回多级页面的实现方法
Oct 27 Javascript
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
JavaScript的console命令使用实例
Dec 03 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
Search Engine Friendly的URL设计
2006/10/09 PHP
我的论坛源代码(三)
2006/10/09 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
详解vue父子模版嵌套案例
2017/03/04 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
python 获取当天每个准点时间戳的实例
2018/05/22 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
普通大学毕业生自荐信
2013/11/04 职场文书
2013届毕业生求职信范文
2013/11/20 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
2014年公司工作总结
2014/11/22 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL