这就是您合并加载事件的方式吗?



我有一个简短的问题。我正在尝试在HTML5中合并一个onload事件。这是我的代码,但它拒绝工作。请让我知道我做错了什么。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Animation</title>
    <script>
        document.getElementById('videoBackground').onload = function()
        {
            document.body.style.backgroundColor = 'black';
        }
    </script>
    <script type="text/javascript" src="js/animCD.js"></script>    
    <link rel="stylesheet" href="style.css" type="text/css" />
    </head>
    <body>
    <video id="videoBackground" poster="img/loading.png" onload="function()" width="1920" height="1080" preload="auto" onprogress="animCD_onprogress();" onended="animCD_start();">
        <source id="colorVid_mp4" type="video/mp4" src="img/luther_color.mp4">      
    </video>

指定someElement.onload = function() { }创建一般意义上的 onload 处理程序的方式。您的不起作用的原因是您的脚本块位于相关元素之前并立即运行,此时document.getElementById()找不到该元素,因为它尚未解析。

您可以通过将脚本块移动到元素后面的某个位置(许多人将他们的脚本放在正文的末尾)或通过在页面的 onload 处理程序中调用它来解决此问题:

window.onload = function() {
    document.getElementById('videoBackground').onload = function() {
        document.body.style.backgroundColor = 'black';
    }
};

尽管页面/窗口的 onload 应该在所有内容加载后调用,所以我不确定从那里创建更多的 onload 处理程序有什么意义。

我注意到您的 html 中还有一个 onload="function()" 属性。这是指定处理程序的另一种方法,尽管内联事件属性不是执行操作的首选方法,但您需要放置一个实际的函数名称onload="someFunction()"以调用在其他地方定义的命名函数,或者直接放置代码:

<video ... onload="document.body.style.backgroundColor='black';" ...>

在执行getElementById('videoBackground')时,具有 id videoBackground 的元素尚不存在。

将脚本移动到创建 videoBackground 元素的位置下方,或者在使用 document.onload 加载 DOM 后运行脚本。

最新更新