2011-06-02 353 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