我有一个为两个事件触发的处理程序:
>模糊对象A的触发器
>点击对象B.
问题是当对象A有焦点并且我点击B时,两个事件都被触发.我想阻止这种情况发生.在这种情况下,处理程序应该只执行一次,因为在其中有一个toggle()由于第二次调用而无效.有什么方法可以清除对象上的所有待处理事件吗?
<div id='panel'>Hey!</div>
<input type='text' id='a'>
<div id='b'>Hello</div>
function handler() {
$('#panel').toggle();
}
$('#a').blur(handler);
$('#b').click(handler);
当文本框具有焦点并且用户单击div“b”时,将触发两个事件 – 输入a的模糊和div b的单击.这两个事件都由同一个函数处理,并且由于该函数偶然切换了另一个元素(面板),因此功能失败,因为两个切换相互抵消.所以,我需要的是一种清除元素的所有待处理事件的方法.
最佳答案 您可能正在寻找
event.preventDefault()
:
If this method is called, the default action of the event will not be triggered.
或者,也许您需要.unbind()
一个事件,然后在另一个事件被触发后重新绑定它.
.undelegate()
可以做你想做的事情:
Remove a handler from the event for all elements which match the current selector,
now or in the future, based upon a specific set of root elements.