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 相关文章推荐
准确获得页面、窗口高度及宽度的JS
Nov 26 Javascript
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
JQuery打造省市下拉框联动效果
May 18 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
Jquery使用css方法改变样式实例
May 18 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
May 15 Javascript
Javascript 基础---Ajax入门必看
Jul 06 Javascript
微信小程序 开发指南详解
Sep 27 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 Javascript
ES6 let和const定义变量与常量的应用实例分析
Jun 27 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
Apr 16 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开启opcache提升代码性能
2015/04/26 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python实现感知机(PLA)算法
2017/12/20 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
Python读取指定日期邮件的实例
2019/02/01 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
python 字典套字典或列表的示例
2019/12/16 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
理财计划书
2014/08/14 职场文书
代理人委托书
2014/09/16 职场文书
班主任2015新年寄语
2014/12/08 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
MySQL系列之十一 日志记录
2021/07/02 MySQL
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server