这是因为在循环中,所有的按钮的点击事件都使用了同一个临时变量temp。当点击事件触发时,循环已经结束,temp的值会变成最后一个按钮的引用。所以无论点击哪个按钮,都会修改最后一个按钮的样式。

解决这个问题的方法是使用闭包,将temp变量作为参数传入一个立即执行函数中,创建一个新的作用域,使得每次循环时都能保存正确的temp值。

以下是修改后的代码:

<script>
    window.onload = function () {
        var btn = document.querySelectorAll("button");
        for (var i = 0; i < btn.length; i++) {
            (function (temp) {
                temp.onclick = function () {
                    var r = parseInt(Math.random() * 256);
                    var g = parseInt(Math.random() * 256);
                    var b = parseInt(Math.random() * 256);
                    temp.style.backgroundColor = "rgb(" + r + "," + g + "," + b + ")";
                }
            })(btn[i]);
        }
    }
</script>

这样修改后,每个按钮的点击事件都会使用正确的temp值

script windowonload = function var btn = documentquerySelectorAllbutton; var temp; for var i = 0; i btnlength; i++ temp = btni;

原文地址: https://www.cveoy.top/t/topic/iwuY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录