开发者问题收集

未捕获的类型错误:无法设置未定义的属性“display”

2019-09-07
5542

当我单击此 div 时,我希望它显示一条错误消息,指出它太昂贵了

我尝试将 document.getElementByClassName 更改为变量,但我没想到它会起作用。

function hideError() {
  document.getElementsByClassName("errorMessage").style.display = "none";
}
function showError() {
  document.getElementsByClassName("errorMessage").style.display = "contents";
  setTimeout("hideError", 5000);

未捕获的 TypeError:无法设置未定义的属性“display”

2个回答

您已经非常接近了。第一个问题, getElementsByClassName 返回 HTMLCollection 。您需要遍历此列表或调用 [0] 来获取第一项。

其次,对 setTimeout 的调用应作为第一个参数的函数(而不是字符串): setTimeout(hideError, 5000);

function hideError() {
  document.getElementsByClassName("errorMessage")[0].style.display = "none";
}

function showError() {
  document.getElementsByClassName("errorMessage")[0].style.display = "contents";
  setTimeout(hideError, 5000);
}

showError();
<div class="errorMessage">ERROR</div>
skovy
2019-09-07

getElementsByClassName 返回实时 HTMLCollection 。要将样式添加到单个元素,请应用循环。此外, setTimeout 要求第一个参数为 callback 函数,而不是字符串。

function hideError() {
    [...document.getElementsByClassName('errorMessage')].forEach(e => e.style.display = "none");
}

function showError() {
    [...document.getElementsByClassName('errorMessage')].forEach(e => e.style.display = "contents");
    setTimeout(hideError, 5000);
}
random
2019-09-07