替代

时间:2011-09-26 21:05:56

标签: javascript

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

5 个答案:

答案 0 :(得分:26)

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

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

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

答案 1 :(得分:14)

在纯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();
 });

答案 2 :(得分:3)

这是Tejs回应的微小变化。我经常发现将init()函数与注册事件处理程序的代码分开更具可读性和可管理性:

function init(e) {

    //statements...

}

document.addEventListener('DOMContentLoaded', init, false);

另外,代替显式的init()函数,我有时会使用一个自动执行的匿名函数放在页面的最底部,就在</body>标记之前:

(function() {

    //statements...

})();

答案 3 :(得分:2)

最佳选择是将呼叫放在页面底部的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', ...)那样可靠。

答案 4 :(得分:-2)

<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>