2017-03-25 7 views
0

ブートストラップモーダルウィンドウを開閉するページがあります。モーダルの内容はHTMLのようにAJAXに由来します。JavaScript関数がAjaxと重複しています

<button id="myBtn"> 

ともAJAXから来て、ボタンのクリックイベントに結合するモーダル、内のスクリプト::私は開いて閉じた場合

<script> 
    $("#myBtn").click(function() { 
     // do something 
    }); 
</script> 

のは、私はモーダルでボタンがあるとしましょうモーダルウィンドウを複数回実行すると、上記の関数が繰り返しバインドされ、// do somethingの部分が複数回実行されます。これは明らかに起こりたくありません。

これを行う正しい方法は何ですか?

EDIT:(は要求に応じて詳細を追加)

それが示されていますとき、データが、モーダルにロードされます。

$('#myModal').on('shown.bs.modal', function (event) { 
    $('#myModal').html('Loading...'); 

    $.ajax({ 
     type: "POST", 
     dataType: "html", 
     url: "ajaxHandler.php", 
     data: (myData), 
     success: function(data){ 
      $('#myModal').html(data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      // handle error 
      $('#myModal').modal.modal('hide'); 
     } 
    }); 
}); 

モーダルにロードされますHTMLを、buttonが含まれており、 click()結合。

モーダルを非表示にしてから再び表示すると、古いコンテンツが何度も上書きされます。 jQueryを使って

+0

は何を代わりに起こることをしたいですか?あなたの目標を説明していないので、明らかではありません。 [mcve]を作成してください。 – 4castle

+0

私は一度だけ実行したいです。 – Mkoch

+0

AJAX経由でブートストラップモーダルを開くと、古いDOMが置き換えられますか?あなたはどうやってロードしていますか?それはおそらく私たちが見る必要があるコードです。 – 4castle

答えて

0

、あなたはoneを使用する必要があります一度機能はのみ発生する場合。

$("#foo").one("click", function() { 
    alert("This will be displayed only once."); 
}); 
+0

OPによれば、イベントは複数回バインドされているため、複数の '.one'がバインドされます。つまり、複数回も実行されます。 – 4castle

+0

はい、それは@ 4castleのようです。 – Mkoch

関連する問題