【问题标题】:Cannot read attribute of null using array无法使用数组读取 null 的属性
【发布时间】:2018-07-05 16:05:41
【问题描述】:

我正在尝试更改已存在但隐藏的元素类。这个问题是每当执行代码时都会引发空异常。尝试了所有方法,但似乎无法解决问题

function changeMenu(code) {
    var i, id = ["'demo'", "'drill'", "'alert'"];
    for (i = 0; i <= 2; i += 1) {
        if (document.getElementById(id[i]) !== null) {
            if (i !== code) {
                document.getElementById(id[i]).setAttribute('class', 'row hidden');
            } else {
                document.getElementById(id[i]).setAttribute('class', 'row');
            }
        } else {window.alert("error");}
    }
}

脚本已经加载到文档末尾,id也存在。

【问题讨论】:

  • 你的数组声明中同时有 " 和 '?这是错误吗?
  • @JacobGoh ' ' 只是用来避免使用转义字符,因为 getElementById 接受引号中的元素 id
  • 在上面的代码中你需要在哪里转义或取消转义?
  • 它接受一个字符串。不是element id in quotes。字符串可以是“abc”或“abc”。 getElementById 也一样

标签: javascript html arrays string loops


【解决方案1】:

引用和测试存在几个问题

我相信你确实是有意这样做的:

var ids = ["demo", "drill", "alert"];
function changeMenu(code) {
  for (var i = 0; i < ids.length; i++) {
    var elm = document.getElementById(id[i]);
    if (elm) { // element exists
      elm.classList.toggle("hidden",ids[i] !== code);
    } 
    else {
      window.alert("error");
    }
  }
}

【讨论】:

  • 这种方法比我的初学者方法效率高,但是我在“if (elm)”中有一个问题,榆树将如何被视为布尔值或 null 也被认为是错误的
  • undefined, null, empty, 0 都是假的。
【解决方案2】:

这里的问题是您将带有' 的ID 存储在字符串中,因此当您调用document.getElementById("'demo'") 时,它不会找到该元素并返回null

将您的 id 数组声明更改为:

var i, id = ["demo", "drill", "alert"];

脚本已经加载到文档末尾,id也存在。

是的,该 id 存在,但上面没有 ',只需将其从您的数组中删除即可。

【讨论】:

  • 不客气,它确实发生了,请记住这一点。
猜你喜欢
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
相关资源
最近更新 更多