如何在 jQuery 中解除“悬停”的绑定?

IT技术 javascript jquery
2021-02-23 10:09:44

如何在 jQuery 中解除“悬停”的绑定?

这不起作用:

$(this).unbind('hover');
6个回答

$(this).unbind('mouseenter').unbind('mouseleave')

或者更简洁(感谢@Chad Grant):

$(this).unbind('mouseenter mouseleave')

在mouseleave之后是mouseenter的必要序列吗?
2021-05-08 10:09:44
或 $(this).unbind('mouseenter mouseleave')
2021-05-12 10:09:44

实际上,jQuery 文档有一个比上面显示的链接示例更简单的方法(尽管它们可以正常工作):

$("#myElement").unbind('mouseenter mouseleave');

从 jQuery 1.7 开始,您还可以使用$.on()$.off()用于事件绑定,因此要取消悬停事件的绑定,您将使用更简单和更整洁的:

$('#myElement').off('hover');

伪事件名称“hover”用作“mouseenter mouseleave”的简写,但在早期的 jQuery 版本中处理方式不同;要求您明确删除每个文字事件名称。使用$.off()now 允许您使用相同的速记删除两个鼠标事件。

2016 年编辑:

仍然是一个受欢迎的问题,因此值得关注@Dennis98在下面评论中的观点,即在 jQuery 1.9+ 中,“悬停”事件已被弃用,而支持标准的“mouseenter mouseleave”调用。所以你的事件绑定声明现在应该是这样的:

$('#myElement').off('mouseenter mouseleave');

值得一提的是,当给出多个过滤参数时,提供的所有参数都必须与要删除的事件处理程序匹配。我还注意到 jQuery API 文档声明 .off() 方法删除了与 .on() 相关的事件处理程序。这是否意味着它仅适用于使用 .on() 添加的事件,我不确定。但它不应该。
2021-04-19 10:09:44
我有 jQuery 1.10.2 但$.off("hover")它不起作用。但是,使用这两个事件效果很好。
2021-04-22 10:09:44
@Dennis98 - 您只是在谈论将 jQuery 悬停 hack 移至 deprecated.js,对吗?$.off() 事件绑定在更高版本的 jQuery 中仍然可用。
2021-04-22 10:09:44
@AlexisWilke 是的,它在 v1.9 中被删除了,查找最后一个链接.. ;)
2021-05-05 10:09:44
对。:)$.off()仍然存在,这是目前推荐的解除绑定事件的方法。所以到目前为止你需要写$(element).off("mouseenter mouseleave");.
2021-05-14 10:09:44

单独取消绑定mouseentermouseleave事件或取消绑定元素上的所有事件。

$(this).unbind('mouseenter').unbind('mouseleave');

或者

$(this).unbind();  // assuming you have no other handlers you want to keep

unbind() 不适用于硬编码的内联事件。

因此,例如,如果您想从 解除鼠标悬停事件的绑定 <div id="some_div" onmouseover="do_something();">,我发现这$('#some_div').attr('onmouseover','')是实现它的一种快速而肮脏的方法。

另一个解决方案是.die()用于附加.live() 的事件

前任。:

// attach click event for <a> tags
$('a').live('click', function(){});

// deattach click event from <a> tags
$('a').die('click');

你可以在这里找到一个很好的参考:探索 jQuery .live() 和 .die()

(对不起我的英语:>)