<车身负载=“;init()">

Alternative to <body onload="init ();">

本文关键字:quot gt init lt 负载      更新时间:2023-09-26

我正在修复为我编写的一个旧脚本。我需要它在没有<body onload="init ();">的情况下运行。我想从脚本内部运行函数,而不需要像那个命令那样的内联代码。对不起,我不是JS专家,但我该怎么做?

<script type="text/javascript">
    function init() {
        // Put your code here
    }
    window.onload = init;
</script>

或者,如果您使用的是jQuery:

$(function() {
    // Your code here
});

在纯JavaScript实现中,您需要等待页面准备好调用您的事件。最简单的解决方案是这样的:

<script type="text/javascript" language="javascript">
      window.onload = function()
      {
          init();
      };
</script>

但这并不比将其放在标签本身上的原始实现好多少。你能做的就是等待一个特定的事件:

 document.addEventListener("DOMContentLoaded", function()
 {
     init();
 }, false);

这应该在周期的早些时候启动,并且应该做得很好。

此外,如果您使用的是jQuery,您可以简单地添加一个函数,以便在触发该事件时使用简单的语法执行:

 $(document).ready(function() // or $(function()
 {
     init();
 });

最好的选择是将对init()的调用放在页面底部:

<html>
<head>
...
</head>
<body>
.... page content here ...
<script type="text/javascript">init();</script>
</body>
</html>

这样把它放在底部,你就可以确保它几乎是页面上最后一个东西。但是,请注意,它不如使用body标记中的onload选项、jquery的$('document').ready()或mootool的window.addEvent('domready', ...)那么可靠。

下面是Tejs响应的一个细微变化。我经常发现将init((函数从注册事件处理程序的代码中分离出来更容易阅读和管理:

function init(e) {
    //statements...
}
document.addEventListener('DOMContentLoaded', init, false);

此外,我有时会使用一个自执行的匿名函数来代替显式的init((函数,该函数位于页面的最底部,就在</body>标签之前:

(function() {
    //statements...
})();
<script type="text/javascript">
    function init() {
        // Put your code here
    }
    window.onload = init;
</script>

不应该使用这个

<script type="text/javascript">
    function init() {
        // Put your code here
    }
    window.onload = init();
</script>