开发者问题收集

当按钮不是未定义时,出现“未捕获类型错误:无法设置未定义的属性‘onclick’”

2020-06-12
556

我遇到了这个错误: Uncaught TypeError: Cannot set property 'onclick' of undefined ,而按钮并非未定义。有人能帮我找到错误并修复它吗?我对 Javascript 还比较陌生。HTML、Javascript 和输出都包括在内。谢谢 HTML(这里没有脚本链接标签):

<h1 id="change">Color change</h1>
<button class="color-change" data-colour="green">Green</button>
<button class="color-change" data-colour="red">Red</button>
<button class="color-change" data-colour="blue">Blue</button>

JavaScript

document.addEventListener("DOMContentLoaded", function(){
  buttons = document.querySelectorAll(".color-change");
  var i;
  for(i=0; i<buttons.length; ++i){
    let button = buttons[i];
    console.log(button);
    document.button.onclick = function(){
      document.querySelector("#change").style.color = document.buttons[i].dataset.colour;
    }
  }
});

输出:

<button class="color-change" data-colour="green">Green</button>
index.js:24 Uncaught TypeError: Cannot set property 'onclick' of undefined
    at HTMLDocument.<anonymous> (index.js:24)
2个回答

您不需要调用 document. 来引用您声明的变量 buttonbuttons

Balastrong
2020-06-12

简单地删除文档并不能解决这个问题。您在按钮 onclick 中使用变量 i,因此无论您单击哪个按钮,它始终是最后一个值,因为在单击它时(代码实际运行时)循环已结束。 您需要将其分配给循环内的新变量,如下所示

for(i=0; i < buttons.length; i++){
    let button = buttons[i];
    //Reaasign to new variable
    let ii = i;
    button.onclick = function(){
      document.querySelector("#change").style.color = buttons[ii].dataset.colour;
    }
 }
Moshe Sommers
2020-06-12