我不确定我是否真的理解它,也许它在第三个参数,[options]设置我不完全理解,但我会直接看到代码。
构建文档后,我想添加事件监听器来处理keyup和keydowns。我把这一切都搞定了,效果很好。
window.addEventListener('keydown', keyinputhandler, false);
window.addEventListener('keyup', keyinputhandler, false);
function keyinputhandler(e) {
//doing stuff with it here
}
当我使用jquery的悬停方法做某事时,问题就出现了。
var someotherelement = $('#someotherelement');
someotherelement.hover(function(){
window.removeEventListener('keydown', keyinputhandler, false);
window.removeEventListener('keyup', keyinputhandler, false);
//for some reason, the events in keyinputhandler keep firing here, why?
}, function () {
window.addEventListener('keydown', keyinputhandler, false);
window.addEventListener('keyup', keyinputhandler, false);
}
);
在上面的代码中,我包含了一个我想要实现的评论区域。当我悬停特定元素时,我不希望触发其他事件处理程序。当某些元素悬停时,如何禁用keyinputhandler的行为?
答案 0 :(得分:-1)
你能确保第一个回调正在执行吗? jQuery" hover"函数将第一个回调作为监听器附加到" mouseenter"事件。
也许这会有所帮助(来自http://api.jquery.com/mouseenter/):
mouseenter事件在处理事件冒泡的方式上与鼠标悬停不同。如果在此示例中使用鼠标悬停,则当鼠标指针移过Inner元素时,将触发处理程序。这通常是不受欢迎的行为。另一方面,mouseenter事件仅在鼠标进入绑定的元素而不是后代时触发其处理程序。因此,在此示例中,处理程序在鼠标进入外部元素时触发,而不是内部元素。
您正在将侦听器附加到窗口对象。然后,您将另一个侦听器附加到内部元素。我认为这是问题,因为鼠标中心冒泡行为。
你可以尝试一下吗?
$( "#someotherelement" )
.mouseover(function() {
window.removeEventListener('keydown', keyinputhandler, false);
window.removeEventListener('keyup', keyinputhandler, false);
})
.mouseout(function() {
window.addEventListener('keydown', keyinputhandler, false);
window.addEventListener('keyup', keyinputhandler, false);
});