0

愚蠢的问题,但是当我写的时候window.onload = alert('hi')我得到了警报。

但是,如果我测试它的存在:if (window.onload) alert("exists")我得到undefined. 怎么来的?

4

4 回答 4

7

您正在调用该alert方法(立即执行)并将其返回值 ( undefined) 分配给onload.

如果你想分配一个函数,onload那么你需要分配一个实际的函数,而不是任何旧函数调用的返回值。

例如:

onload = function () { 
    alert('hi');
};

或者

function createHiAlertFunction() {
    return function () {
        alert('hi');
    }
}
onload = createHiAlertFunction();

但是,一般来说,您应该避免将事物分配给事件处理程序属性,而应使用事件绑定方法。这样,如果您想调用多个函数,您就不必处理事情。

window.addEventListener('load', function () {
    alert('hi');
});​​​

请注意,旧的 IE 不支持此功能,因此您可能希望使用提供抽象层的众多库之一(例如 YUI 或 jQuery),该抽象层包括对旧的专有 Microsoft 方式的支持。

于 2012-05-28T14:05:59.040 回答
1

window.onload触发事件。默认情况下它没有值,当一切准备就绪时,它的值由用户设置。如果您没有设置值,它将是undefined

于 2012-05-28T14:06:42.813 回答
0

尝试以下操作:

if(typeof window.onload !== "undefined") alert("exists!")

这会显式检查对象上是否存在 onload 属性window

编辑:

你看到的undefined是警报函数的返回值。

于 2012-05-28T14:34:27.260 回答
-1

你在哪里触发那个脚本?如果 window.onload 返回 false,则表示该页面尚未完全加载。

于 2012-05-28T14:06:37.710 回答