2014-05-08 30 views
0

我有一個包含多個部分的主頁面。每個這些部分定義一個(document).ready事件,調用一個函數。該功能是唯一的,並在該部分內定義。 例如是否有document.ready與AJAX加載節的頁面等效?

Main.htm

section1:定義funcABC()。 (document).ready calls funcABC();

section2:定義funcDEF()。 (document).ready調用funcDEF();

section3:定義funcXYZ()。 (document).ready calls funcXYZ();

等。

所以頁面加載,並且每個部分調用它需要的功能,一切正常。

該頁面現在已更改爲通過AJAX(jquery.load())加載部分。上面顯示的佈局不再起作用(document).ready只在Main.htm加載時觸發,但不加載部分。

Main.htm無法調用這些部分中的函數,因爲它不知道每個部分需要哪個部分,也沒有定義(它們在每個部分都是動態生成的)。

我知道設計是陌生的,它的東西,我繼承並有..

基本上,我需要每節自身的功能它加載後,因爲它做的工作。我該如何做這項工作?

+0

你應該能夠在jquery.load()的回調函數中指定函數調用。將每個部分的功能定義爲每個部分的回調。 – mts7

+0

我認爲這個帖子可能是你正在尋找的[http://stackoverflow.com/questions/12773600/jquery-run-script-after-ajax-load][1] [1]:http:// stackoverflow.com/questions/12773600/jquery-run-script-after-ajax-load – StackUMan

+0

jquery的'ajax'方法允許多個處理程序('done','fail','always'),您可以利用它目的。將加載的部分作爲第一條指令插入成功處理程序,然後調用特定於部分的函數。 – collapsar

回答

1

(document).ready是當你加載DOM事件的處理程序,但是,你引發一些AJAX事件,並要在事件成功完成執行功能。服務器響應時執行的函數稱爲回調函數。讓我們假設你有一個函數,就像這樣:

function() myFunction { 
    //... 
} 

你想myFunction被作爲一個回調函數執行。讓我們假設你使用jquery.load,像這樣:

$("#result").load("ajax/test.html", function() { 
    myFunction(); 
}); 

這是一個事件處理程序,將請求發送到"ajax/test.html"當響應到達,執行作爲參數傳遞一個匿名函數。這個未命名的函數調用myFunction

0

如果我理解正確,您有多個AJAX調用,並且想在完成所有事情之後做些事情。這與jQuery(document).ready()與加載DOM相關無關。這是你的應用程序的邏輯。

的精簡版的解決方案(有點特設)將如下:

  1. 如果您使用jQuery.ajax()電話,它們都具有done/fail/always回調,你可以用它來通知一些其他的功能,他們已經完成(如果你不使用jQuery.ajax,然後找到相關的鉤子/回調,並相應地調整下面的代碼示例)。

  2. 再經過3個Ajax調用完成後,你可以這樣做:

function ABC(){ 
    $.ajax({url:'...'}).always(waitForThemToFinish); 
} 
function DEF(){ 
    $.ajax({url:'...'}).always(waitForThemToFinish); 
} 
function GHI(){ 
    $.ajax({url:'...'}).always(waitForThemToFinish); 
} 

var finished = 0; 
function waitForThemToFinish(){ 
    if (finished < 3) { // To ensure that the operation below is called only once 
    finished++; 
    if (finished >= 3) { 
     // do something after some 3 ajax calls have finished 
    }  
    } 
} 
相關問題