【问题标题】:Uncaught typerror: cannot set property 'display' of undefined未捕获的类型错误:无法设置未定义的属性“显示”
【发布时间】:2020-01-10 02:11:46
【问题描述】:

当我点击这个 div 时,我希望它显示一条错误消息,说它太贵了

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

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

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

【问题讨论】:

  • getElementsByClassName() 返回一个节点列表。您必须遍历列表并单独更新每个元素。
  • @randomSoul 好吧,关键是它是一个 list 节点。

标签: javascript html typeerror


【解决方案1】:

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);
}

【讨论】:

    【解决方案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>

    【讨论】:

    • 感谢您的解决方案!
    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多