2013-05-10 26 views
1

我想爲jQuery提供一個擴展,以便重新綁定事件處理程序。這是因爲事件處理程序在使用ajax加載部分視圖時被綁定,並且它們綁定到$(document)以便它們在頁面上觸發。jQuery重新綁定通過ajax加載時

但是,如果頁面未被刷新時,部分再次下載,我現在得到兩個事件綁定。等等。

因此,我創建了一個擴展,它將解除綁定上一個事件並重新添加它。

這是一個合理的解決方案嗎?

jQuery.fn.extend({ 

    offOn: function (types, selector, data, fn) { 
     this.off(types, selector, fn); 
     this.on(types, selector, data, fn); 
    } 

}); 

使用像這樣內通過我主頁上點擊事件時加載的部分。

<script type="text/javascript"> 


$(function() { 
    $(document).offOn('click', '#my-details-section a.delete-row', onDeleteRow); 

    function onDeleteRow() { // do something } 
}); 

</script> 
+0

是的,雖然它非常簡單,但插件幾乎沒有必要。另外,'.off()'調用可以通過命名事件間距來安全地簡化,例如。 ('click.partialLoad','#my-details-section a.delete-row',onDeleteRow);'。 – 2013-05-10 04:21:39

+0

@ Beetroot-Beetroot我不確定我是否完全理解命名空間事件的含義是什麼意思? – dreza 2013-05-10 04:24:19

+0

'click.partialLoad'命名空間事件,如我的例子。它允許'.off()'使用相同的命名空間選擇性地分離先前用'.on()'附加的處理程序。 – 2013-05-10 04:31:27

回答

0

我建議採取看看如何創建一個插件。這真的很容易。以下是一些可幫助您開始使用的文檔:Creating a jQuery Plugin

這將使您可以更輕鬆地重複使用它。

+0

謝謝,我來看看 – dreza 2013-05-10 04:23:03