jQuery API

.mouseenter()

.mouseenter( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.

  • version added: 1.0.mouseenter( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mouseenter( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mouseenter()

This method is a shortcut for .bind('mouseenter', handler) in the first two variations, and .trigger('mouseenter') in the third.

The mouseenter JavaScript event is proprietary to Internet Explorer. Because of the event's general utility, jQuery simulates this event so that it can be used regardless of browser. This event is sent to an element when the mouse pointer enters the element. Any HTML element can receive this event.

For example, consider the HTML:

<div id="outer">
  Outer
  <div id="inner">
    Inner
  </div>
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

The event handler can be bound to any element:

$('#outer').mouseenter(function() {
  $('#log').append('<div>Handler for .mouseenter() called.</div>');
});

Now when the mouse pointer moves over the Outer <div>, the message is appended to <div id="log">. You can also trigger the event when another element is clicked:

$('#other').click(function() {
  $('#outer').mouseenter();
});

After this code executes, clicks on Trigger the handler will also append the message.

The mouseenter event differs from mouseover in the way it handles event bubbling. If mouseover were used in this example, then when the mouse pointer moved over the Inner element, the handler would be triggered. This is usually undesirable behavior. The mouseenter event, on the other hand, only triggers its handler when the mouse enters the element it is bound to, not a descendant. So in this example, the handler is triggered when the mouse enters the Outer element, but not the Inner element.

Example:

Show texts when mouseenter and mouseout event triggering. mouseover fires when the pointer moves into the child element as well, while mouseenter fires only when the pointer moves into the bound element.

<!DOCTYPE html>
<html>
<head>
  <style>
div.out {
width:40%;
height:120px;
margin:0 15px;
background-color:#D6EDFC;
float:left;
}
div.in {
width:60%;
height:60%;
background-color:#FFCC00;
margin:10px auto;
}
p {
line-height:1em;
margin:0;
padding:0;
}
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  
<div class="out overout"><p>move your mouse</p><div class="in overout"><p>move your mouse</p><p>0</p></div><p>0</p></div>

<div class="out enterleave"><p>move your mouse</p><div class="in enterleave"><p>move your mouse</p><p>0</p></div><p>0</p></div>


<script>
    var i = 0;
    $("div.overout").mouseover(function(){
      $("p:first",this).text("mouse over");
      $("p:last",this).text(++i);
    }).mouseout(function(){
      $("p:first",this).text("mouse out");
    });

    var n = 0;
    $("div.enterleave").mouseenter(function(){
      $("p:first",this).text("mouse enter");
      $("p:last",this).text(++n);
    }).mouseleave(function(){
      $("p:first",this).text("mouse leave");
    });

</script>

</body>
</html>

Demo:

Support and Contributions

Need help with .mouseenter() or have a question about it? Visit the jQuery Forum or the #jquery channel on irc.freenode.net.

Think you've discovered a jQuery bug related to .mouseenter()? Report it to the jQuery core team.

Found a problem with this documentation? Report it to the jQuery API team.

* All fields are required
  • Melanie

    I've tried this code and works perfectly when you put it in script tags in the body, however, when I put the jquery into the script tags in the head section, it doesn't. Why is this?

  • Mike

    Try to put your script inside ready() function – http://api.jquery.com/ready/

  • chrissilich

    Because when the browser reads the script in the head, the object you're trying to apply it to doesn't exist yet, so the browser doesn't know what you're talking about. You need to set it to run that script only after the document is ready. Put it inside $(document).ready(function(){
    //here
    });
    That way the browser will render the page and all it's elements, then apply your mouseenter script to them.

  • Dohab

    Is there any way to prevent multi mouseenter that were happen at the same time from excution ?
    for example , I have a function that scale an image up and down, when I move my mouse 5 times frequently over an image , and then I move my mouse pointer away, the image keeps scaling 5 times while my mouse pointer is acually far away from that image! that image keep scaling up and down 5 times, like pulsing.

    I tried .one('mouseenter',function{}), but this prevent mouseenter from excution the next time I move my mouse agian on the image.

  • wizzud

    This is really more about the action that you've programmed to happen as a result of the event, rather than the event itself.
    For example:
    say you have set an animation on a mouseenter that increases size over a period of 1 second, and on mouseleave you have another animation that decreases size over a period of 1 second.
    With these simple animations, when you enter the target an animation gets queued for that target that will take 1 second to complete. When you leave the target, another animation gets queued – for the same target! – that also takes 1 second to complete. But because it is queued after the first animation (and is for the same target), it won't start until the first animation has completed.
    In order to prevent this, you need to manage the fx queue for your target element. The simplest way is to run stop() prior to queuing the next animation for the target. This immediately ceases the current animation, so that the next one to be queued will start without having to wait for a previous animation to complete.
    Eg: on mouseenter/mouseleave, stop() the current animation *then* add the relevant animation for the event.

  • http://www.kensfi.com ken

    mouseenter / mouseleave helped me to get rid of background image flickering problems.

  • Lalala

    Doesn't work properly. No one.
    Try to move the mouse in a crazy way inside one of the yellow squares.
    Get out and in pretty fast. And try again.
    You will see that numbers start to increase like if we were going in and out but without doing it.
    So it doesn't work.

  • Ekcol

    Your browser counts moving from the yellow box to the text inside the yellow box as a mouseout then a mouseover. That's why the numbers go up 2 at a time when you do this. In an actual working example you'd code around that but this is just a demo.

  • Yumei

    A real good alternative, I had to make a “hidden” menu with just a little visible part and using .mouseenter() worked perfectly where .mouseover() was doing silly things when I was over the text elements (like on the above examples).

  • Yumei

    A real good alternative, I had to make a “hidden” menu with just a little visible part and using .mouseenter() worked perfectly where .mouseover() was doing silly things when I was over the text elements (like on the above examples).

  • http://www.cakka.web.id Cakka

    can somebody give other tutorial about slide show for hover mouse ?
    so, if somebody hover the mouse slide show will change to the next or previous leve..
    thanks