如何取消绑定使用一种方法附加的jquery中的事件?

时间:2016-12-22 16:02:11

标签: javascript jquery

假设我有以下标记:

<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中的事件?

2 个答案:

答案 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')
})