2012-03-20 120 views
2

我知道這已被問了很多次,但我還沒有找到一個清晰有用的答案,所以我想我會以更清晰的格式再次寫這個問題?Jquery .load()不在加載的內容中加載JavaScript

問題是,當您使用.load()函數,並且您需要在加載的文件中運行javascript時,它不起作用,因爲我猜測DOM已經加載。

解決這個問題的簡單方法是在加載的文件中再次加載JavaScript,但是如果你有很多文件被加載,那麼所有的JavaScript都不是很好的做法。

有沒有人知道這樣做的好方法?

這是儘可能接近我可以合理整齊?

<a data-toggle="modal" data-target="#DIV" href="./ajax/file.php?id='.$row['id'].'"></a> 


$("a[data-toggle='modal']").on('click', function() { 
    var target, url; 
    target = $(this).attr('data-target'); 
    url = $(this).attr('href'); 
    return $(target).load(url, function(responseText, statusText, xhr){ 
     if(statusText == "success"){ 
     // Re-initiate all required javascript if the load was successful. 
      $(".datepicker").datepicker({ 
       changeMonth: true, 
      changeYear: true, 
      showOn: "both", 
      buttonImage: "./assets/img/calendar.gif", 
      buttonImageOnly: true, 
      dateFormat: 'dd-mm-yy' 
     }); 
     } 
     if(statusText == "error"){ 
      alert("There was a problem trying to load the page."); 
     } 
    }); 
}); 

的file.php裏面很簡單,有需要的東西像日期選擇器等 載荷工作正常字段的表格。

+0

如果包含「url」的響應(即將內容加載到「target」中),它可能會澄清您的問題。 – JoshNaro 2012-03-20 21:19:16

+0

我認爲你有一個輸入,需要是一個日期選擇器文本框,它不工作,我是對嗎? – 2012-03-20 21:48:42

+0

是的,但它可以是任何JavaScript我只是使用datepicker作爲例子。 – Mediabeastnz 2012-03-21 02:36:40

回答

1

如果我明白你的問題,然後我覺得你應該換所有的JavaScript函數(即需要每一個成功的Ajax調用後執行)的單一功能裏面像

​​

和您的document.ready事件應該像下面一個

​​

,每當你需要一個AJAX調用成功後,初始化一些動態內容只需要調用initReady()函數如下

initReady(); 

你的情況,你可以做你成功回調像下面

if(statusText == "success"){ 
    // Re-initiate all required javascript if the load was successful. 
    initReady();  
} 

給定的代碼裏面所以每次你沒有時間來寫你的每一個成功的ajax回調函數內所有的JavaScript代碼和它也會節省你的時間並保持你的代碼清潔。

注:一旦我遇到使用這種方法的一個問題僅出現在日期選擇器,它是在一個動態加載的頁面有一個日期選擇器輸入,甚至我的initReady後,沒有被初始化()函數被調用,比我用setTimeout函數調用我的initReady()函數

setTimeout(function(){ initReady() },10); 

,它解決了我的問題。希望它能幫助你。

+0

謝謝謝赫,那是個好主意。 – Mediabeastnz 2012-03-21 02:36:03