我想为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