如果你有这样的东西:
jQuery(selector).focus(function(){...});
jQuery(selector).focus(function(){...});
焦点会触发两次,无论如何我可以纠正/阻止它吗?
答案 0 :(得分:8)
使用data('events')
查找事件处理程序:
var isBound = function(el, ev) {
var found = false;
$.each($(el).data("events"), function(i, e) {
if (i === ev) {
found = true;
}
});
return found;
}
if (!isBound(selector, 'focus')) {
$(selector).bind('focus', fn);
}
我认为你也可以在jQuery中使用.one()
函数,看看http://api.jquery.com/one/
答案 1 :(得分:3)
您可以使用unbind删除早期的处理程序。你将如何使用它完全取决于你为什么要避免让两个处理程序一开始就开火。
答案 2 :(得分:1)
尝试使用事件命名空间并使用bind:
var fnFocus = function(){ ... };
$(selector).bind('focus.namespace',fnFocus);
$(selector).unbind('focus.namespace').bind('focus.namespace',fnFocus);