虽然我向 getElementById 推送了一个参数,但我想知道这个“为空”错误来自哪里?
TypeError: document.getElementById(...) is null
[Break On This Error]
document.getElementById(elmId).innerHTML = value;
Line 75
除此之外,我想知道为什么除非我单击这些播放列表图片之一,否则标题和时间没有显示?
虽然我向 getElementById 推送了一个参数,但我想知道这个“为空”错误来自哪里?
TypeError: document.getElementById(...) is null
[Break On This Error]
document.getElementById(elmId).innerHTML = value;
Line 75
除此之外,我想知道为什么除非我单击这些播放列表图片之一,否则标题和时间没有显示?
确保脚本放置在您尝试操作的文档的 BODY 元素的底部,而不是放在 HEAD 元素中或放置在您想要“获取”的任何元素之前。
导入脚本还是内联脚本都没有关系,重要的是放置。您也不必将命令放在函数中;虽然这是一种很好的做法,但您可以直接调用它,但它工作得很好。
所有这些结果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;
}
}
这意味着id
传递给的元素getElementById()
不存在。
您可以使用JQuery来确保文档的所有元素在开始客户端脚本之前都已准备就绪
$(document).ready(
function()
{
document.getElementById(elmId).innerHTML = value;
}
);
我得到了同样的错误。就我而言,我在一个页面中有多个具有相同 id 的 div。我重命名了使用的 div 的另一个 id 并解决了这个问题。
所以确认元素是否:
在您的代码中,您可以找到此函数:
// 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。
我有同样的问题。它只是 javascript 的脚本加载得太快了——在 HTML 的元素加载之前。所以浏览器返回 null,因为浏览器找不到你想要操作的元素在哪里。
在学生的工作中发现了类似的问题,脚本元素放在关闭 body 标记之后,所以很明显,JavaScript 找不到任何 HTML 元素。
但是,还有一个更严重的错误:引用了包含一些代码的外部 javascript 文件,该代码在插入新内容之前删除了某个 HTML 元素的所有内容。注释掉这个引用后,一切正常。
因此,有时错误可能是某些先前调用的 Javascript 更改了内容甚至 DOM,因此稍后调用例如 getElementById 没有意义,因为该元素已被删除。