如何解除jQuery中的“hover”?
如何解除jQuery中的“hover”?
这不起作用:
$(this).unbind('hover');
$(this).unbind('mouseenter').unbind('mouseleave')
或更简洁(谢谢@Chad格兰特 ):
$(this).unbind('mouseenter mouseleave')
实际上, jQuery文档比上面显示的链接示例有一个更简单的方法(尽pipe它们可以正常工作):
$("#myElement").unbind('mouseenter mouseleave');
从jQuery 1.7开始,您也可以使用$.on()
和$.on()
进行事件绑定,所以要解除绑定事件,您可以使用更简单更整齐的方法:
$('#myElement').off('hover');
伪事件名称“hover” 被用作 “mouseenter mouseleave” 的简写 ,但在较早的jQuery版本中处理方式不同; 要求你明确地删除每个文字事件名称。 使用$.off()
现在允许您使用相同的简写forms删除两个鼠标事件。
编辑2016:
仍然是一个受欢迎的问题,所以值得引起关注的@ Dennis98在下面的评论中指出,在jQuery 1.9 +中,“hover”事件被弃用赞成标准的“mouseenter mouseleave”调用。 所以你的事件绑定声明现在应该是这样的:
$('#myElement').off('mouseenter mouseleave');
解除绑定mouseenter
和mouseleave
事件,或者解除绑定元素上的所有事件。
$(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();">
的mouseover事件,我发现$('#some_div').attr('onmouseover','')
是一个快速和肮脏的方式来实现它。
对于使用.live()附加的事件,另一个解决scheme是.die () 。
例:
// attach click event for <a> tags $('a').live('click', function(){}); // deattach click event from <a> tags $('a').die('click');
你可以在这里find一个很好的参考: 探索jQuery .live()和.die()
(对不起,我的英文:“>)
所有hover在幕后都是绑定到mouseover和mouseout属性。 我会分别绑定和解除你的函数。
例如,假设你有以下的html:
<a href="#" class="myLink">Link</a>
那么你的jQuery将是:
$(document).ready(function() { function mouseOver() { $(this).css('color', 'red'); } function mouseOut() { $(this).css('color', 'blue'); } // either of these might work $('.myLink').hover(mouseOver, mouseOut); $('.myLink').mouseover(mouseOver).mouseout(mouseOut); // otherwise use this $('.myLink').bind('mouseover', mouseOver).bind('mouseout', mouseOut); // then to unbind $('.myLink').click(function(e) { e.preventDefault(); $('.myLink').unbind('mouseover', mouseOver).unbind('mouseout', mouseOut); }); });
我发现这个作为第二个参数(函数).hover()
$('#yourId').hover( function(){ // Your code goes here }, function(){ $(this).unbind() } });
第一个函数(参数.hover())是mouseover,并执行你的代码。 第二个参数是mouseout,它将从#yourId中解除hover事件。 您的代码将只执行一次。
您可以使用off
来删除附加的特定事件处理程序
$("#ID").on ("eventName", additionalCss, handlerFunction); // to remove the specific handler $("#ID").off ("eventName", additionalCss, handlerFunction);
使用这个,你将只删除handlerFunction
另一个好的做法是为多个附加事件设置一个名称空间
$("#ID").on ("eventName1.nameSpace", additionalCss, handlerFunction1); $("#ID").on ("eventName2.nameSpace", additionalCss, handlerFunction2); // ... $("#ID").on ("eventNameN.nameSpace", additionalCss, handlerFunctionN); // and to remove handlerFunction from 1 to N, just use this $("#ID").off(".nameSpace");