2016-09-05 33 views
0

所以,我有以下代碼:JavaScript的 - 等到AJAX回調中DOM的修改已經完成

$(document).ready(function(){ 
    //Retrieve menu html 
    $.get('/modules/menu.php', function(data) { 
     //Load menu html 
     $('main#main').prepend(data); 
    }); 

    //Initialize Menu 
    menuInit(); 

    $('#menuToggle').click(function() { 
     $('#main_menu').fadeToggle(); 
    }); 
}); 

menuInit()包含在HTML,而不是直接使用$.get()的時候成功地修改DOM元素,所以intialization有沒有問題,但是,當使用ajax時,菜單的初始化在DOM元素完全加載之前開始。

我已經做了一點研究,.prepend()不支持回調,所以不是一個選項。

周圍menuInit()setTimeOut()與100毫秒的作品,但它肯定會失敗,連接速度慢,我需要更動態的東西。

+1

如果移動'menuInit()'調用到'$會發生什麼。在'.prepend()'之後get()'成功回調? (你不需要'.prepend()'回調。) – nnnnnn

+0

哈哈哈哈,真棒!你只是修復它o.O我以爲我曾試過... – TheCamps10

回答

0

只要把代碼的其餘部分回調內部,它執行後的數據已經被添加到頁面:

$(document).ready(function(){ 
    //Retrieve menu html 
    $.get('/modules/menu.php', function(data) { 
     //Load menu html 
     $('main#main').prepend(data); 

     //Initialize Menu 
     menuInit(); 

     $('#menuToggle').click(function() { 
      $('#main_menu').fadeToggle(); 
     }); 
    }); 

}); 
+0

@ TheCamps10 - 這是否回答你的問題? – jfriend00