2012-03-20 12 views
2

これは何度も尋ねられていますが、私はまだ明確で有用な答えを見つけていないと思いますので、Jquery .load()がロードされたコンテンツにjavascriptをロードしていません

問題は、.load()関数を使用して、ロード済みのファイルで実行する必要があるjavascriptが、DOMが既にロードされていると思われるため動作しない場合です。

この簡単な方法は、ロードされたファイルの内部にもう一度javascriptを読み込むことですが、たくさんのファイルがある場合は、その場所にjavascriptを置いてロードすると非常に良い方法ではありません。

これを行う良い方法を知っている人はいますか?

これは、私が合理的にきちんとしたものにすることができるほど近いですか? file.phpインサイド

<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."); 
     } 
    }); 
}); 

単に 負荷が正常に動作している日付ピッカーなどのようなものが必要なフィールドを持つフォームです。

+0

"url"(つまり「ターゲット」に読み込まれたコンテンツ)のレスポンスを含めると、おそらくあなたの質問が明確になります。 – JoshNaro

+0

私は、あなたが日付ピッカーのテキストボックスである必要があり、それがうまくいかないと思っています。 –

+0

はい、それは何かjavascript私は例としてdatepickerを使用していた可能性があります。 – Mediabeastnz

答えて

1

私はあなたの質問を理解している場合、私はあなたが

​​

とあなたのdocument.readyイベントのような単一の関数内で(成功するたびに、AJAX呼び出しの後に実行する必要があります)あなたのjavascript機能のすべてをラップすべきだと思います1

​​

を以下のようになり、あなたはAJAX成功コールの後、いくつかの動的なコンテンツを初期化する必要があるときだけ

を以下のようinitReady()関数を呼び出す必要がありますあなたがちょうどそう

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

下記のコードのようなあなたの成功コールバックの内側に、あなたのすべてのAJAXの成功コールバック関数内のすべてのJavaScriptコードを記述する必要はありませんたびにそれを行うことができ、あなたの場合は

initReady(); 

とまた、時間を節約し、コードをきれいに保つことができます。

注:私だけ日付ピッカーで、このアプローチを使用して問題に直面してきたし、それが動的にロードされたページに日付ピッカーの入力があったということでしたし、それも私のinitReady後に初期化されていませんでしたら、()関数が呼び出されると、私は私のinitReady()関数

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

呼び出すためのsetTimeout関数を使用されるよりも、それは私の問題を解決してきました。それがあなたを助けることを願っています。

+0

シェイクに感謝します。素晴らしいアイデアです。 – Mediabeastnz

関連する問題