35

虽然我向 getElementById 推送了一个参数,但我想知道这个“为空”错误来自哪里?

TypeError: document.getElementById(...) is null
[Break On This Error]   

document.getElementById(elmId).innerHTML = value;

Line 75  

除此之外,我想知道为什么除非我单击这些播放列表图片之一,否则标题和时间没有显示?

4

8 回答 8

67

确保脚本放置在您尝试操作的文档的 BODY 元素的底部,而不是放在 HEAD 元素中或放置在您想要“获取”的任何元素之前。

导入脚本还是内联脚本都没有关系,重要的是放置。您也不必将命令放在函数中;虽然这是一种很好的做法,但您可以直接调用它,但它工作得很好。

于 2014-08-01T20:31:23.333 回答
31

所有这些结果null

document.getElementById('volume');
document.getElementById('bytesLoaded');
document.getElementById('startBytes');
document.getElementById('bytesTotal');

您需要像这样在 updateHTML 中进行空检查:

function updateHTML(elmId, value) {
  var elem = document.getElementById(elmId);
  if(typeof elem !== 'undefined' && elem !== null) {
    elem.innerHTML = value;
  }
}
于 2012-12-14T20:16:23.610 回答
13

这意味着id传递给的元素getElementById()不存在。

于 2012-12-14T20:11:15.577 回答
9

您可以使用JQuery来确保文档的所有元素在开始客户端脚本之前都已准备就绪

$(document).ready(
    function()
    {
        document.getElementById(elmId).innerHTML = value;
    }
);
于 2014-01-12T19:43:10.203 回答
4

我得到了同样的错误。就我而言,我在一个页面中有多个具有相同 id 的 div。我重命名了使用的 div 的另一个 id 并解决了这个问题。

所以确认元素是否:

  • 以 id 存在
  • 没有与 id 重复的
  • 确认脚本是否被调用
于 2017-06-12T06:55:33.567 回答
2

在您的代码中,您可以找到此函数:

// Update a particular HTML element with a new value
function updateHTML(elmId, value) {
  document.getElementById(elmId).innerHTML = value;
}

稍后,您使用几个参数调用此函数:

updateHTML("videoCurrentTime", secondsToHms(ytplayer.getCurrentTime())+' /');
updateHTML("videoDuration", secondsToHms(ytplayer.getDuration()));
updateHTML("bytesTotal", ytplayer.getVideoBytesTotal());
updateHTML("startBytes", ytplayer.getVideoStartBytes());
updateHTML("bytesLoaded", ytplayer.getVideoBytesLoaded());
updateHTML("volume", ytplayer.getVolume());

第一个参数用于“getElementById”,但 ID 为“bytesTotal”、“startBytes”、“bytesLoaded”和“volume”的元素不存在。您需要创建它们,因为它们将返回 null。

于 2012-12-14T20:17:11.520 回答
2

我有同样的问题。它只是 javascript 的脚本加载得太快了——在 HTML 的元素加载之前。所以浏览器返回 null,因为浏览器找不到你想要操作的元素在哪里。

于 2015-12-09T04:11:08.720 回答
1

在学生的工作中发现了类似的问题,脚本元素放在关闭 body 标记之后,所以很明显,JavaScript 找不到任何 HTML 元素。

但是,还有一个更严重的错误:引用了包含一些代码的外部 javascript 文件,该代码在插入新内容之前删除了某个 HTML 元素的所有内容。注释掉这个引用后,一切正常。

因此,有时错误可能是某些先前调用的 Javascript 更改了内容甚至 DOM,因此稍后调用例如 getElementById 没有意义,因为该元素已被删除。

于 2020-02-04T14:35:37.017 回答