手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
摘要:本文实例讲述了javascript使用for循环批量注册的事件不能正确获取索引值的解决方法。分享给大家供大家参考。具体分析如下:可能不少朋友...

本文实例讲述了javascript使用for循环批量注册的事件不能正确获取索引值的解决方法。分享给大家供大家参考。具体分析如下:

可能不少朋友会遇到一个问题,那就是当使用for循环批量注册事件处理函数,然后最后通过事件处理函数获取当前元素的索引值的时候会失败,先看一段代码实例:

复制代码 代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset=" utf-8">

<meta name="author" content="http://www.jb51.net/" />

<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="http://www.jb51.net/" />

<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="http://www.jb51.net/" />

<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使用for循环批量注册的事件不能正确获取索引值的解决方法】相关文章:

JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法

javascript自定义右键弹出菜单实现方法

js兼容火狐获取图片宽和高的方法

JavaScript中使用自然对数ln的方法

JavaScript通过事件代理高亮显示表格行的方法

Jquery注册事件实现方法

JavaScript中for循环的使用详解

谈一谈javascript中继承的多种方式

javascript实现树形菜单的方法

javascript相关事件的几个概念

精品推荐
分类导航