假设我有以下标记:
<div class="button">1</div>
<div class="button">2</div>
<div class="button">3</div>
<div class="button">4</div>
我有以下jquery代码:
$(".button").one('mouseenter', function() {
console.log("A button was pressed for the first time")
$(".button").on('mouseenter', function(){
console.log("One button has already been pressed once")
})
});
问题是一个事件附加到所有四个按钮。因此,如果我将鼠标悬停在第一个按钮上,然后再次按下第一个按钮,那么一切都会正常,但是如果我先将鼠标悬停在第二个按钮上,则首先再触发一个方法。如果我能做到这一点:
$(".button").one('mouseenter', function() {
console.log("A button was pressed for the first time")
$(".button").on('mouseenter', function(){
console.log("One button has already been pressed once")
})
//Remove event attached with one method from all buttons
});
这样一种方法不会多次触发。但是jquery说只能删除附加on
方法的事件。
那么是否有任何方法可以解除使用一种方法附加的jquery中的事件?
答案 0 :(得分:4)
one
在这里没有为你做任何事情,尽管使用它是无害的。
删除与one
挂钩的处理程序,就像处理on
的处理程序一样:通过使用相同的事件和相同的处理程序调用{{3}}(或使用事件命名空间等。)。
所以在你的情况下,最简单的可能是:
function handleOnce() {
console.log("A button was pressed for the first time")
$(".button").off('mouseenter', handleOnce) // <===
.on('mouseenter', function(){
console.log("One button has already been pressed once")
})
}
$(".button").on('mouseenter', handleOnce);
答案 1 :(得分:0)
无需使用.one
附加活动。以下代码适用于每个按钮,在其回调中,您可以在鼠标输入时应用逻辑。
$(".button").on('mouseenter', function(){
$(this) // is the button that was pressed
})
是否有理由删除此事件?我不明白为什么上面的代码不适合你的情况。
如果您只想要应用事件和以下逻辑,则可以解除绑定:
$(".button").on('mouseenter', function(){
$(this) // is the button that was pressed
// your logic here
$(this).unbind('mouseenter')
})