为什么windows.onload被执行了好几次?

时间:2011-06-02 19:58:17

标签: javascript jquery

我像这样绑定window.onload事件

// It's a little more complex than this, I analyze if there is any other function 
// attached but for the sake of the question it's ok, this behaves the same.
window.onload = myfunction; 

在生产服务器上多次在我的本地计算机上触发Onload

如果我用jQuery等价物改变它

$jQuery(window).load(myfunction);

它的行为符合预期(仅执行一次)。

你能否帮助我理解为什么第一个选项没有按预期工作的可能原因?

谢谢!

1 个答案:

答案 0 :(得分:6)

作业的括号 - myfunction() - 执行你的功能。您尚未显示myfunction的作用,但这意味着该函数的返回值被分配给window.onload,而不是函数本身。所以,我不知道如何执行,除非你以某种方式让它工作,比如用return this;结束函数

你想要

window.onload = myfunction;

<击>


鉴于window.onload的性质,纯粹的浏览器事件似乎不可能myfunction进行两次调用。因此,函数内部的断点将帮助您查看调用堆栈。我已经为Chrome添加了截图。

示例代码:

var alertme = function() {
    alert("Hello");
}

window.onload = alertme;

function testsecondcall() {
    alertme();
}

testsecondcall();
  1. 在Chrome中打开您的页面。
  2. 页面加载一次后,打开“开发人员工具”面板,在函数内的行上放置一个断点,然后刷新页面。
  3. 检查两次的调用堆栈。一个将是空的(实际的window.onload)。另一个应该给你一些信息如下:
  4. enter image description here

    在右侧的“调用堆栈”下,您会看到alertme

    调用testsecondcall