虽然我把一个参数推到了getElementById我想知道这个'是null'错误来自哪里?
TypeError: document.getElementById(...) is null
[Break On This Error]
document.getElementById(elmId).innerHTML = value;
Line 75
除此之外,我想知道为什么标题和时间没有显示,除非我点击其中一个播放列表图片?
答案 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并修复了问题。
确认元素是否为
答案 6 :(得分:1)
我有同样的问题。只是javascript的脚本加载得太快 - 在加载HTML元素之前。因此浏览器返回null,因为浏览器无法找到您想要操作的元素的位置。
答案 7 :(得分:-1)
在学生的工作中发现了类似的问题,脚本元素在关闭body标签之后被放置了,因此很明显,JavaScript无法找到任何HTML元素。
但是,还有一个更严重的错误:使用一些代码引用了一个外部javascript文件,该文件在插入新内容之前删除了某个HTML元素的所有内容。注释掉此参考后,一切正常。
因此,有时错误可能是某些先前称为Javascript的内容或什至是DOM发生了更改,因此稍后调用getElementById毫无意义,因为该元素已被删除。