2011-06-02 80 views
3

我绑定如果我通过了jQuery相当于改变像这样为什么windows.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 window.onload事件被触发两次我的本地机器上的生产服务器

在几次

$jQuery(window).load(myfunction); 

它的行为与预期(只执行一次)。

能不能帮我了解可能的原因它不工作作为第一选择应该?

谢谢!

+1

称为鉴于您的编辑,有没有足够的上下文来猜测为什么该方法会被调用两次的任何可能的原因。请包括任何其他参考加载事件和/或'myfunction'。 – Nicole 2011-06-02 20:07:16

+0

你在这里展示的是完全标准的。我们需要查看代码的其余部分,以查看问题所在。 – squidbe 2011-06-02 20:08:12

+1

@Timmy:看起来你已经“示范”了你的问题。除非你用* actual *代码修改你的问题,否则没有理由保持这种状态。 – Jeremy 2011-06-02 20:12:12

回答

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)。另外应该给你像下面的一些信息:

enter image description here

在右边,“调用堆栈”下,你看到alertmetestsecondcall

+1

男人,打我18秒。 :-) – ceejayoz 2011-06-02 19:59:48

+0

对不起,愚蠢的错误错误的问题。代码是正确的,但我在这里写错了。我只是解决了这个问题。谢谢 – StackOverflower 2011-06-02 20:01:31

+0

这是很有帮助的人。我会玩这个。谢谢! – StackOverflower 2011-06-02 20:36:04