<script>         window.onload = function () {             var btn = document.querySelectorAll("button");             var temp;             for (var i = 0; i < btn.length; i++) {                 temp  = btn[i];                 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 + ")";                 }             }         }     </script>  为什么一直是第三个变色内容:这是因为在循环中,所有的按钮的点击事件都使用了同一个临时变量temp。当点击事件触发时,循环已经结束,temp的值会变成最后一个按钮的引用。所以无论点击哪个按钮,都会修改最后一个按钮的样式。\n\n解决这个问题的方法是使用闭包,将temp变量作为参数传入一个立即执行函数中,创建一个新的作用域,使得每次循环时都能保存正确的temp值。\n\n以下是修改后的代码:\n\n```javascript\n<script>\n    window.onload = function () {\n        var btn = document.querySelectorAll("button");\n        for (var i = 0; i < btn.length; i++) {\n            (function (temp) {\n                temp.onclick = function () {\n                    var r = parseInt(Math.random() * 256);\n                    var g = parseInt(Math.random() * 256);\n                    var b = parseInt(Math.random() * 256);\n                    temp.style.backgroundColor = "rgb(" + r + "," + g + "," + b + ")";\n                }\n            })(btn[i]);\n        }\n    }\n</script>\n```\n\n这样修改后,每个按钮的点击事件都会使用正确的temp值。
JavaScript 按钮点击事件闭包解决问题:为什么一直是第三个按钮变色?

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

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