2012-01-23 13 views
1

私のAJAX/jQuery実装についてのヘルプを探しています。2番目のAJAXコールの後にjQueryコードが実行されない

jQueryダイアログに動的にコードをロードしようとしています。
ボタンを初期化してタブを読み込むjQueryコードがいくつかあります。

問題は、ロードされたコンテンツ内のコードが2番目のAJAX呼び出しで実行されていないことです。だから、最初はすべてうまく動作しますが、ダイアログを閉じてもう一度やり直した後ではありません。

基本ページ:

$("#button").click(function() { someFunction(); }); 

function someFunction() { 
    var dialogVar = $('<div id="dialog"></div>').appendTo('body'); 
    dialogVar.dialog({ autoOpen: true, 
      modal: true, 
      close : function(){ 
       $(this).dialog("destroy"); 
      }, 
      open : function(){ 
         dialog.load("dialogcontent.php",{} , function(data){ 
         // Some logic  
        }); 
    } 
} 

動的にロードされたコンテンツ(dialogcontent.php)

<script type="text/javascript"> 
    $("#tabs").tabs(); 
</script> 


<div id="tabs"> 
    <ul> 
     <li><a href="#tabs-0">Tab1</a></li> 
     <li><a href="#tabs-1">Tab2</a></li> 
    </ul> 
</div> 


<div id="tabs-0">Tab1 Content</div> 
<div id="tabs-1">Tab2 Content</div> 

だからもう一度、タブが初めてではなく、二度目に作成されます。 POSTコールがサーバーに送信され、データが返されているのを確認できますが、JSは実行されません。

+0

:だから要するに、あなたはだからあなたのダイアログ近いコードは次のようになりますtabs("destroy")

を呼び出す必要があります。 –

答えて

1

ボタンをクリックするたびにダイアログノードを再作成してDOMに追加することが問題になっている可能性があります。 (ページの読み込み時に)ダイアログを一度インスタンス化し、autoOpenをfalseに設定してすぐにポップアップしないようにコードを再構築し、ボタンを押してダイアログを開くだけです。

$(function(){ 
    var dialogVar = $('<div id="dialog"></div>').appendTo('body'); 
    dialogVar.dialog({ 
    autoOpen: false, 
    modal: true, 
     close : function(){ 
     $(this).dialog("destroy"); 
     }, 
     open : function(){ 
     dialog.load("dialogcontent.php",{} , function(data){ 
      // Some logic  
     }); 
     } 
    }); 

    $("#button").click(function() { 
    $('#dialog').dialog('open'); 
    }); 

}; 

私はあなたがjQueryのUIのダイアログを使用していると仮定しているので、私はここに利用できるドキュメントを参照しました:http://jqueryui.com/demos/dialog/#method-open

+0

あなたの返信ありがとう! ボタンオブジェクトから取得したポストにvarを渡しているため、最初はダイアログを開始できません。だから私はボタンのクリックイベント内から "someFunction"を呼び出す必要があります。 しかし、あなたはDOM発言で私をトリガーしました。 DOMを作成する前にDOMから要素を削除するコードをいくつか追加しました。それは動作します! '$( "dialog")。remove();' – Adamski

1

私はあまりにもこれに走りました。

タブのように見えるのは、呼び出しの間にある状態を保持し、後続の呼び出しは各タブのIDをインクリメントして内部状態を混乱させます。それらを見つけるためにJSLintのようなツールを使ってあなたのコードを実行します - あなたは構文エラーを持っている

close : function(){ 
     $("#tabs").dialog("destroy"); 
     $(this).dialog("destroy"); 
    }, 
関連する問題