如何使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 }); 

http://api.jquery.com/on/

干杯。

您可以为事件处理程序命名空间,然后确保在绑定之前取消绑定:

 $('#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... }); 

这将适用于动态添加的对象

Interesting Posts