如何在加载页面时运行函数?

Cla*_*son 223 html javascript onload

我想在加载页面时运行一个函数,但我不想在<body>标记中使用它.

如果我在其中初始化它,我有一个运行的脚本<body>,如下所示:

function codeAddress() {
  // code
}
Run Code Online (Sandbox Code Playgroud)
<body onLoad="codeAddress()">
Run Code Online (Sandbox Code Playgroud)

但是我想在没有它的情况下运行它<body onload="codeAddress()">并且我已经尝试了很多东西,例如:

window.onload = codeAddress;
Run Code Online (Sandbox Code Playgroud)

但它没有用.

那么如何在加载页面时运行它?

Dar*_*rov 336

window.onload = codeAddress;应该工作 - 这是一个演示,以及完整的代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript">
        function codeAddress() {
            alert('ok');
        }
        window.onload = codeAddress;
        </script>
    </head>
    <body>
    
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)


<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript">
        function codeAddress() {
            alert('ok');
        }
        
        </script>
    </head>
    <body onload="codeAddress();">
    
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 正如我在回答中所说的那样,所看到的代码没有任何问题 - 它无法工作的原因必须是某个地方的JS错误. (3认同)

Spe*_*May 156

自从jQuery发布以来,本机JavaScript已经采用了一些很棒的功能,而不是使用jQuery或window.onload.所有现代浏览器现在都有自己的DOM就绪函数,而不使用jQuery库.

如果你使用原生Javascript我会推荐这个.

document.addEventListener('DOMContentLoaded', function() {
    alert("Ready!");
}, false);
Run Code Online (Sandbox Code Playgroud)

  • @ᔕᖺᘎᕊ为'泡沫'属性(你不必包括,我只是为了好习惯填写所有布尔值).'cancelable'属性还有另一个布尔语句,但它不是很有用,因为上面的语句已经是不可取消的.在这里阅读更多相关信息:https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded (6认同)
  • (菜鸟问:“ false”是做什么的?) (3认同)
  • `window.onload` 只能设置一次。如果你想在加载时使用 `window.onload` 运行两个函数,第二个将覆盖第一个。 (2认同)

Eat*_*oes 44

采取Darin的答案,但jQuery风格.(我知道用户要求使用javascript).

小提琴

$(document).ready ( function(){
   alert('ok');
});?
Run Code Online (Sandbox Code Playgroud)

  • 你的回答教我分配,但不是关于jQuery/javascript. (4认同)
  • @VijayKumar 这是 jQuery,而不是原生 Javascript,因此您需要包含一个 jQuery 库才能使其工作 (2认同)

Hab*_*eeb 22

替代解决方案.为了简洁和代码简单,我更喜欢这个.

(function () {
    alert("I am here");
})();
Run Code Online (Sandbox Code Playgroud)

这是一个匿名函数,其中未指定名称.这里发生的是,函数是一起定义和执行的.将其添加到正文的开头或结尾,具体取决于是在加载页面之前执行还是在加载所有HTML元素之后立即执行.

  • 有人可以解释一下这与将脚本标记放在 HTML 页面末尾有何不同以及匿名函数的用途吗? (2认同)
  • @ChewieTheChorkie。最后一行是根据答案本身,因为它是一个 IIFE(立即调用函数表达式)。 (2认同)

Wil*_*ill 10

window.onload = function() { ......等等不是一个好的答案.

这可能会有效,但它也会破坏已经挂钩到该事件的任何其他功能.或者,如果另一个函数在您的事件之后挂钩,那么它将会破坏您的事件.因此,您可以花费大量时间来试图弄清楚为什么有效的东西不再存在.

这里有一个更健全的答案:

if(window.attachEvent) {
    window.attachEvent('onload', yourFunctionName);
} else {
    if(window.onload) {
        var curronload = window.onload;
        var newonload = function(evt) {
            curronload(evt);
            yourFunctionName(evt);
        };
        window.onload = newonload;
    } else {
        window.onload = yourFunctionName;
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在使用的一些代码,我忘记了我发现它给予作者信用的地方.

function my_function() {
    // whatever code I want to run after page load
}
if (window.attachEvent) {window.attachEvent('onload', my_function);}
else if (window.addEventListener) {window.addEventListener('load', my_function, false);}
else {document.addEventListener('load', my_function, false);}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)


Kam*_*ski 6

尝试就绪状态更改

document.addEventListener('readystatechange', () => {    
  if (document.readyState == 'complete') codeAddress();
});
Run Code Online (Sandbox Code Playgroud)

状态是:

  • 加载- 文档正在加载(在代码段中没有触发)
  • 交互式- 文档被解析,之前被触发DOMContentLoaded
  • 完成- 文档和资源被加载,之前被触发window.onload

document.addEventListener('readystatechange', () => {    
  if (document.readyState == 'complete') codeAddress();
});
Run Code Online (Sandbox Code Playgroud)