2013-05-10 64 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

相关问题