看下面代码<ul id="demo"> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>
<script> var ul=document.getElementById('demo'); var oLi=ul.getElementsByTagName('li'); for (var i = 0; i < oLi.length; i++) { oLi[i].onclick=function(){ alert(i); } } </script>
那么当我们点击第一个li就会弹出0,点击第二个就会弹出1……真的是这样吗?当我们去实践的时候就会发现,每次弹出的,都是5!!!
为什么会这样呢?
因为当代码执行到这里的时候,i已经变成5了,也就是说,我们还没来得及点击,i已经变成5了,这时候再点击弹出的当然只能是5。你说为什么是5,而不是4,i明明只会增长到4啊!这个我也不知道为什么,如果你知道麻烦告诉我。
那么解决办法是什么呢?<script> var ul=document.getElementById('demo'); var oLi=ul.getElementsByTagName('li'); for (var i = 0; i < oLi.length; i++) { (function(n){ oLi[n].onclick=function(){ alert(n); } })(i); } </script>
这里我们在for循环内部定义了一个立即执行函数,这样就可以顺利弹出每个li的索引了。
原创文章,转载请注明出处!
相关文章
- 01-11python函数定义中引用外部变量的一个问题
- 01-11HDU 1043 Eight 八数码问题 A*算法(经典问题)
- 01-11G. Petya and Graph(经典项目与项目消耗问题)(网络流)
- 01-11修改Xilinx .coe文件易导致一个问题
- 01-11Delphi写的DLL,OCX中多线程一个同步问题
- 01-11spring 事务处理中,同一个类中:A方法(无事务)调B方法(有事务),事务不生效问题
- 01-11西邮 问题 C: 给你一个666
- 01-11关于量词的一个问题
- 01-11ThreadLocal怎么实现线程隔离的?可见性问题?为什么要重新定义一个threadLocalHashCode?为什么有内存泄露?弱引用又是什么?
- 01-11go实现钟表逻辑问题:手表时针与分针之间有一个夹角,写一个函数,传入时、分两个参数,返回时针与分针之间的夹角 要求:小于180度的正数