2015-07-10 125 views
2

如何在「完成頁面加載」和「完成外部腳本執行」之後調用函數?如何在「完成頁面加載」和「完成外部腳本執行」之後調用函數?

我嘗試了以下所有4個選項,但沒有運氣!

$(document).ready.. 
$(window).load... 
window.onload = ... 
$(document).ready(function()... 

做setTimeout對我有用,但不知道這是否100%有效!

setTimeout(function(){ 
//your code here 
}, 3000); 

請指教和幫助!!!

+0

我覺得你的外部腳本應包含3 ñ回調某處,將舉行你的功能。當$(document).ready..' –

+0

可以執行這些外部腳本是的,但我沒有任何訪問權限來更新這些外部腳本進行更新。 – Sandeep

回答

3

我已與你的問題和深要去jQuery源不太感興趣,我想出了一個瘋狂的黑客:)
但關鍵的一點是,你應該把這段代碼在開始的時候,右後你插jQuery

$.statesNum = 0; 
$.fn.ready = function (fn) { 
    $.statesNum++; 
    jQuery.ready.promise().done(fn).then(function() { 
     $.statesNum--; 
     if ($.statesNum == 0) { 
      $(document).trigger("afterReady"); 
     } 
    }); 

    return this; 
}; 

現在,只要你想執行的東西畢竟.ready功能都做,你可以這樣做:

$(document).on("afterReady", function() { 
    alert("Hey, the ready functions are executed"); 
}); 
+0

感謝解決方案,但是這是什麼」$ .statesNum ++ ;「是嗎?你能解釋一下你的邏輯嗎? – Sandeep

+0

@Sandeep邏輯是jQuery承諾的後面,我正在改變jQuery就緒函數的實現,所以當一個函數傳遞給它時,它會增加一個計數器並添加一個回調函數,這會減少計數器,如果計數器變爲0,它會觸發'afterReady'事件。 – iamawebgeek

+0

很酷,謝謝... – Sandeep

1

腳本按照它們出現在HTML中的順序加載和執行。如果你有簡單的腳本,只需將你想要運行的東西放在底部即可。

但是,如果你有異步運行的複雜腳本(意味着它們並行運行),那麼就不可能知道它們是否已經完成執行而沒有實際查看它們的功能。例如。他們(或他們能)觸發一個你可以聽的事件嗎?或者,也許你可以使用「承諾」模式。

+0

噢,好的...是的,我的外部腳本是「異步並行運行的......對不起,我在JS中不是先進的,什麼是」做「。例如。他們(或他們能)觸發一個你可以聽的事件嗎?或者,也許你可以使用「承諾」模式。「 – Sandeep

+0

我們真的不能告訴你具體細節,除非你告訴我們你正在運行的是什麼,因爲每個腳本都是不同的 – alan0xd7

相關問題