我想爲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>
是的,雖然它非常簡單,但插件幾乎沒有必要。另外,'.off()'調用可以通過命名事件間距來安全地簡化,例如。 ('click.partialLoad','#my-details-section a.delete-row',onDeleteRow);'。 – 2013-05-10 04:21:39
@ Beetroot-Beetroot我不確定我是否完全理解命名空間事件的含義是什麼意思? – dreza 2013-05-10 04:24:19
'click.partialLoad'命名空間事件,如我的例子。它允許'.off()'使用相同的命名空間選擇性地分離先前用'.on()'附加的處理程序。 – 2013-05-10 04:31:27