它说TypeError:document.getElementById(...)为null

时间:2012-12-14 20:06:10

标签: javascript dom runtime-error innerhtml getelementbyid

虽然我把一个参数推到了getElementById我想知道这个'是null'错误来自哪里?

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

document.getElementById(elmId).innerHTML = value;

Line 75  

除此之外,我想知道为什么标题和时间没有显示,除非我点击其中一个播放列表图片?

8 个答案:

答案 0 :(得分:38)

确保脚本放置在您尝试操作的文档的底部中,而不是放在HEAD元素中或放在之前 你想要的任何元素"得到"。

如果您导入脚本或内联脚本无关紧要,重要的是放置。你也不必把命令放在一个函数中;虽然它是一种很好的做法,你可以直接调用它,它可以正常工作。

答案 1 :(得分:21)

所有这些都会导致null

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

您需要在updateHTML中执行null检查,如下所示:

function updateHTML(elmId, value) {
  var elem = document.getElementById(elmId);
  if(typeof elem !== 'undefined' && elem !== null) {
    elem.innerHTML = value;
  }
}

答案 2 :(得分:9)

这意味着传递给id的{​​{1}}元素不存在。

答案 3 :(得分:8)

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

$(document).ready(
    function()
    {
        document.getElementById(elmId).innerHTML = value;
    }
);

答案 4 :(得分: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。

答案 5 :(得分:2)

我得到了同样的错误。在我的情况下,我在页面中有多个具有相同ID的div。我重命名了div的另一个id并修复了问题。

确认元素是否为

  • 以id
  • 存在
  • 没有重复ID
  • 确认脚本是否被调用

答案 6 :(得分:1)

我有同样的问题。只是javascript的脚本加载得太快 - 在加载HTML元素之前。因此浏览器返回null,因为浏览器无法找到您想要操作的元素的位置。

答案 7 :(得分:-1)

在学生的工作中发现了类似的问题,脚本元素在关闭body标签之后被放置了,因此很明显,JavaScript无法找到任何HTML元素。

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

因此,有时错误可能是某些先前称为Javascript的内容或什至是DOM发生了更改,因此稍后调用getElementById毫无意义,因为该元素已被删除。