2017-03-25 17 views
0

我有一個Bootstrap模式窗口打開/關閉的頁面。模塊的內容來自AJAX,就像HTML一樣。比方說,我在模態按鈕:使用Ajax複製JavaScript函數

<button id="myBtn"> 

和模態,這也來自AJAX和綁定到按鈕的單擊事件的腳本:如果我打開和關閉

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

模式窗口多次,上面的函數會重複綁定,並且會執行多次 - 這顯然不希望發生。

什麼是這樣做的正確方法?

編輯:(添加更多細節的請求)

的數據被加載到模態,當它示出:

$('#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,包含buttonclick()綁定。

當模態被隱藏然後再次顯示時,舊內容會一遍又一遍被覆蓋。

+0

你想要發生什麼呢?這並不明顯,因爲你沒有解釋你的目標。你可以創建一個[mcve]嗎? – 4castle

+0

我希望它只運行一次。 – Mkoch

+0

當通過AJAX打開Bootstrap模式時,舊的DOM是否被替換?或者你如何加載它?這可能是我們需要看到的代碼。 – 4castle

回答

0

使用JQuery,如果您希望該功能只在您應該使用one時纔會發生。

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

根據OP的說法,這個事件被綁定了不止一次,所以你將會綁定多個'.one',這意味着它仍然會執行多次。 – 4castle

+0

是的,就像@ 4castle說的那樣。 – Mkoch