How do I unbind “hover” in jQuery?

前端 未结 8 1960
醉话见心
醉话见心 2020-11-28 02:54

How do I unbind \"hover\" in jQuery?

This does not work:

$(this).unbind(\'hover\');
相关标签:
8条回答
  • 2020-11-28 03:33

    You can remove a specific event handler that was attached by on, using off

    $("#ID").on ("eventName", additionalCss, handlerFunction);
    
    // to remove the specific handler
    $("#ID").off ("eventName", additionalCss, handlerFunction);
    

    Using this, you will remove only handlerFunction
    Another good practice, is to set a nameSpace for multiple attached events

    $("#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");
    
    0 讨论(0)
  • 2020-11-28 03:35

    All hover is doing behind the scenes is binding to the mouseover and mouseout property. I would bind and unbind your functions from those events individually.

    For example, say you have the following html:

    <a href="#" class="myLink">Link</a>
    

    then your jQuery would be:

    $(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 讨论(0)
  • 2020-11-28 03:36

    Unbind the mouseenter and mouseleave events individually or unbind all events on the element(s).

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

    or

    $(this).unbind();  // assuming you have no other handlers you want to keep
    
    0 讨论(0)
  • 2020-11-28 03:37

    unbind() doesn't work with hardcoded inline events.

    So, for example, if you want to unbind the mouseover event from <div id="some_div" onmouseover="do_something();">, I found that $('#some_div').attr('onmouseover','') is a quick and dirty way to achieve it.

    0 讨论(0)
  • 2020-11-28 03:43

    I found this works as second argument (function) to .hover()

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

    The first function (argument to .hover()) is mouseover and will execute your code. The second argument is mouseout which will unbind the hover event from #yourId. Your code will be executed only once.

    0 讨论(0)
  • 2020-11-28 03:47

    Actually, the jQuery documentation has a more simple approach than the chained examples shown above (although they'll work just fine):

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

    As of jQuery 1.7, you are also able use $.on() and $.off() for event binding, so to unbind the hover event, you would use the simpler and tidier:

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

    The pseudo-event-name "hover" is used as a shorthand for "mouseenter mouseleave" but was handled differently in earlier jQuery versions; requiring you to expressly remove each of the literal event names. Using $.off() now allows you to drop both mouse events using the same shorthand.

    Edit 2016:

    Still a popular question so it's worth drawing attention to @Dennis98's point in the comments below that in jQuery 1.9+, the "hover" event was deprecated in favour of the standard "mouseenter mouseleave" calls. So your event binding declaration should now look like this:

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

    0 讨论(0)
提交回复
热议问题