script windowonload = function var btn = documentquerySelectorAllbutton; var temp; for var i = 0; i btnlength; i++ temp = btni;
这是因为在循环中,所有的按钮的点击事件都使用了同一个临时变量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值
原文地址: https://www.cveoy.top/t/topic/iwuY 著作权归作者所有。请勿转载和采集!