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

我有一个脚本,如果我在<body>中初始化它,就会运行,像这样:

function codeAddress() {
  // code
}
<body onLoad="codeAddress()">

但我想运行它没有<body onload="codeAddress()“>和我尝试了很多东西,例如:

window.onload = codeAddress;

但这并不奏效。

那么,当页面加载时,我如何运行它呢?


当前回答

看一下domReady脚本,该脚本允许设置多个函数,以便在DOM加载后执行。它基本上是Dom ready在许多流行的JavaScript库中所做的,但它是轻量级的,可以在外部脚本文件的开头使用和添加。

示例使用

// add reference to domReady script or place 
// contents of script before here

function codeAddress() {

}

domReady(codeAddress);

其他回答

替代解决方案。我更喜欢这种方式,因为它简洁,代码简单。

(function () {
    alert("I am here");
})();

这是一个匿名函数,没有指定名称。 这里所发生的是,函数被定义并一起执行。 将它添加到正文的开头或结尾,这取决于它是在加载页面之前执行还是在加载所有HTML元素之后执行。

而不是使用jQuery或window。自jQuery发布以来,原生JavaScript采用了一些很棒的函数。所有现代浏览器现在都有自己的DOM就绪函数,而无需使用jQuery库。

如果您使用本机Javascript,我建议您这样做。

document.addEventListener('DOMContentLoaded', function() {
    alert("Ready!");
}, false);

窗口。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;
    }
}

我一直在使用的一些代码,我忘记了我在哪里找到它给作者的信用。

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);}

希望这对你有所帮助。

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

运行的小提琴

$(document).ready ( function(){
   alert('ok');
});​

看一下domReady脚本,该脚本允许设置多个函数,以便在DOM加载后执行。它基本上是Dom ready在许多流行的JavaScript库中所做的,但它是轻量级的,可以在外部脚本文件的开头使用和添加。

示例使用

// add reference to domReady script or place 
// contents of script before here

function codeAddress() {

}

domReady(codeAddress);