JavaScript 按钮点击事件闭包解决问题:为什么一直是第三个按钮变色?
<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值。
原文地址: https://www.cveoy.top/t/topic/qdXt 著作权归作者所有。请勿转载和采集!