如何使jQuery`bind`或`on`事件处理程序具有幂等性
有没有一种方法可以多次调用$(selector).bind('click', handler)
或$(selector).on('click', handler)
,这样处理程序只能连接一次?
现在,我有多个具有不同成功回调的AJAX处理程序,每个回调都在页面上重新呈现一组不同的元素。 理想情况下,我想将“重新附加事件”例程重构为单个函数而不是所有例程。
我现在想到的唯一方法是明确解除绑定,例如:
$(selector).off('click'); $(selector).on('click', handler);
寻找一种自动执行此类操作的方法。
更好的方法是将.on
调用移动到容器。 如果您有一个容器, .on
粘在一起并应用于与您的选择器匹配的任何现有或新的子项:
$(container-selector).on("click", "element-selector", function(event){ // do stuff });
干杯。
您可以为事件处理程序命名空间,然后确保在绑定之前取消绑定:
$('#something').unbind("click.some-feature").bind("click.some-feature", function() { ... });
您可以编写自己的jQuery函数来自动执行此操作:
$.fn.schneiderBind = function(name, fn) { return this.unbind(name).bind(name, fn); }); $('#something').schneiderBind("click", function() { ... });
或者,您可以使用冒泡和委派在DOM中更高的绑定,在不受动态更新的影响。
$(document).on("click","selector", function() { code goes here... });
这将适用于动态添加的对象