2009-04-30 72 views
90

如何解除jQuery中的「懸停」?如何解除jQuery中的「懸停」?

這不起作用:

$(this).unbind('hover'); 
+2

你們是不是要解除綁定,你分配給懸停事件的功能,或你想修改一個盤旋嗎? – 2009-04-30 02:35:56

+0

爲了澄清Justin Niessner的問題,你是否想要移除Javascript/DOM事件或CSS聲明?後者是一件更復雜的事情。 – eyelidlessness 2009-05-01 05:29:40

回答

188

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

或更簡潔(感謝@Chad格蘭特) :

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

+36

或$(this).unbind('mouseenter mouseleave') – 2009-04-30 08:39:29

+0

這是mouseenter的必要序列,然後是mouseleave之後? – sanghavi7 2012-10-05 10:02:56

2

所有懸停在做幕後綁定到鼠標懸停及移出財產。我會分別綁定和解除這些事件的功能。

例如,假設你有以下的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); 
    }); 

}); 
+0

更正,查看jquery src hover後,實際上是綁定到mouseenter/mouseleave。你應該這樣做。 – bendewey 2009-04-30 02:50:38

10

取消綁定mouseentermouseleave個別事件或解除綁定元素上的所有事件。

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

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

其實,jQuery documentation具有比上面顯示的鏈接的例子一個更簡單的辦法(雖然他們會工作得很好):

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

在jQuery的1.7,您還可以使用$.on()$.off()進行事件綁定,因此要解除懸停事件,您可以使用更簡單更整齊的方法:

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

僞事件名稱「懸停」 is used as a shorthand爲「的mouseenter鼠標離開」,但在早期的jQuery版本中不同的處理;要求您明確刪除每個文字事件名稱。現在使用$.off()可讓您使用相同的速記刪除兩個鼠標事件。

編輯2016年

仍然是一個熱門問題,所以值得提請注意@Dennis98的點在jQuery的1.9+下面的評論中,‘懸停’事件是有利於標準的deprecated「 mouseenter mouseleave「調用。所以,你的事件綁定聲明現在應該是這樣的:

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

4

解除綁定()不硬編碼的在線活動工作。

因此,舉例來說,如果你想從 <div id="some_div" onmouseover="do_something();">取消綁定鼠標懸停事件,我發現$('#some_div').attr('onmouseover','')是一個快速和骯髒的方式來實現它。

0

我發現這工作作爲第二個參數(函數)。hover()

$('#yourId').hover(
    function(){ 
     // Your code goes here 
    }, 
    function(){ 
     $(this).unbind() 
    } 
}); 

第一個函數(參數爲.hover())是mouseover並執行您的代碼。第二個參數是mouseout,它將從#yourId中解除懸停事件。 您的代碼將只執行一次。

3

另一種解決方案是.die()用於附加.live()的事件。

例:

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

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

你可以找到一個很好的REFFERENCE這裏:Exploring jQuery .live() and .die()

(對不起,我的英語:「>)

1

您可以刪除特定的事件處理程序附上on,使用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");