看下面代码<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的索引了。
原创文章,转载请注明出处!
相关文章
- 第一个程序HelloWorld及常见问题解决和练习
- postman请求某接口可以得到数据,离开postman却获取不到数据?问题解决:十几行代码,配置一个代理服务器
- 一个有趣的nginx问题引发的小问题
- Uniapp调用native.js使用经典蓝牙串口通讯方法及问题解决
- dragula 一个 JavaScript 库,实现了网页上的拖放位置
- JavaScript的数据类型问题总结
- 【问题描述】 编写程序统计一个英文文本文件中每个单词的出现次数(词频统计),并将统计结果按单词出现频率由高至低输出到指定文件中。 注:在此单词为仅由字母组成的字符序列。包含大写字母的单词应将大写字母转
- 解决电脑频繁跳出 "已停止工作,出现了一个问题,导致程序停止正常工作,请关闭该程序"...
- 5个经典的JavaScript面试基础问题
- javascript——js string 转 int 注意的问题——parseInt