js闭包for循环总是只执行最后一个值得解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js闭包for循环总是只执行最后一个值得解决方法相关的知识,希望对你有一定的参考价值。

<style>
li{
list-style: none;width:40px;height: 40px;text-align:center;line-height: 40px;cursor: pointer;
}
</style>

html代码:
<ul id="uls">
    <li style="background:#aaa">0</li>
    <li style="background:#bbb">1</li>
    <li style="background:#ccc">2</li>
    <li style="background:#ddd">3</li>
</ul>


//这样写的话每次弹出都是最后一个值
// var lis=document.getElementsByTagName(‘li‘);
// for (var i = 0; i <=lis.length; i++) {
// lis[i].onclick = function(){
// alert(i);
// }
// };

使用闭包方法解决

//解决方法一:
var lis=document.getElementsByTagName(‘li‘);
for (var i = 0; i <=lis.length; i++) {
    (function(i){
        lis[i].onclick = function(){
            alert(i);
        }
    })(i);
};

//解决方法二:
var lis=document.getElementsByTagName(‘li‘);
for (var i = 0; i <=lis.length; i++) {
    lis[i].onclick = function(n){
        return function(){
            alert(n);
        }
    }(i);
};

//解决方法三(jquery):
$("ul li").click(function(){
    var index = $(this).index(); //获取索引下标 也从0开始
    alert($(this).html());
});

以上是关于js闭包for循环总是只执行最后一个值得解决方法的主要内容,如果未能解决你的问题,请参考以下文章

闭包循环问题-for循环只显示最后一个i的值

JS中如何解决for循环中的延迟执行问题

闭包循环问题--for循环只显示最后一个i的值

js作用域for循环闭包问题

JS之经典for循环闭包问题解决方法

浅谈js for循环输出i为同一值的问题(闭包解决)