2014-02-06 66 views
0

如何解除/清除Ajax加載後註冊的事件?如何解除ajax加載後註冊的jquery事件?

我有以下工作流程的Web應用程序:用戶點擊一個按鈕,這將通過推出的fancybox彈出形式:

$('.launchPopUp').click(function(){ 
    var url = 'something'; 

    $.fancybox({ 
    href : url, 
    type : 'ajax' 
    }); 
}); 

當URL的內容是搜索表單。這裏是一個簡化版本:

This is a pop-up window. 
<a id="searchButton">Search</a> 

<script type="text/javascript"> 

    $(document).ready(function(){ 
     $(document).on('click', '#searchButton', function() { 
      //Do something here... 
     }); 
    }); 
</script> 

在彈出框中,用戶搜索內容,從而得到一個記錄表。選擇記錄後,彈出框將被關閉,所選內容將被添加回頁面。

一切按預期工作。但是,當用戶關閉fancybox並重新打開它時,我發現jquery事件被多次觸發。我想知道是否有任何方法來清除這些動態的jQuery事件。

請注意,由於事件基於用戶輸入(在打開彈出窗口之前),因此無法在「基本」頁面中定義jquery事件。

謝謝!


解決方案:

在我的Ajax代碼,我取代了 「文件」,以 「格」:

<script type="text/javascript"> 

    $('#somediv').ready(function(){ 
     $('#somediv').on('click', '#searchButton', function() { 
      //Do something here... 
     }); 
    }); 
</script> 
+0

http://api.jquery.com/off/是你在找什麼 – Will

+1

注意,你不需要等待文檔準備好綁定到文檔本身。 –

+0

謝謝。既然我有很多事件,有沒有一種簡單的方法來解除所有事件?我試過.empty()沒有運氣。 –

回答

4

您可以使用.off(),它消除了事件處理程序。

$(document).off('click', '#searchButton'); 

解除綁定的所有事件

$(selector).off(); 

從文檔

調用.off()不帶參數的除去附着於元件的所有處理程序。

+0

謝謝。既然我有很多事件,有沒有一種簡單的方法來解除所有事件?在啓動fancybox之前,我嘗試了$('。fancybox-overlay-fixed')。empty(),但它不能解決問題。 –

+0

@DerekZ。,'$(selector).off();' – Satpal