JavaScript实现循环点击按钮弹出对应的数字

问题:循环点击按钮弹出对应的数字

<body>
<input type="button" value="按钮1"/>
<input type="button" value="按钮2"/>
<input type="button" value="按钮3"/>
<input type="button" value="按钮4"/>
<input type="button" value="按钮5"/>
<input type="button" value="按钮6"/>
<input type="button" value="按钮7"/>
<input type="button" value="按钮8"/>
<input type="button" value="按钮9"/>
<input type="button" value="按钮10"/>
</body>

错误写法:

<script>
    var inputLists=document.querySelectorAll("input");
    for(var i=0; i<inputLists.length; i++){
        inputLists[i].onclick=function () {
            alert(i+1);
        };
    }
</script>

运行结果:点击任何一个按钮,弹出的数字都是11

解决方法:

方法一:闭包,将i作为函数参数值传递给内部函数。 

    var inputLists=document.querySelectorAll("input");
    for(var i=0; i<inputLists.length; i++){
        (function(j){
            inputLists[j].onclick=function () {
                alert(j+1);
            };
        }(i));
    }

方法二:闭包,将i作为函数参数值传递给内部函数。

    var inputLists=document.querySelectorAll("input");
    for(var i=0; i<inputLists.length; i++){
        inputLists[i].onclick=(function (j) {
            return function(){
                alert(j+1);
            };
        }(i));
    }

方法三:ES6里,用let定义变量,会产生块级作用域。 

    var inputLists=document.querySelectorAll("input");
    for(let i=0; i<inputLists.length; i++){
        inputLists[i].onclick=function () {
            alert(i+1);
        };
    }


猜你喜欢

转载自blog.csdn.net/sleepwalker_1992/article/details/80890441