jQuery mouseenter Event — Enter Without Child Bubbling
Beginner
5 min read
Updated: Oct 2026
4 examples
Live preview
Definition
What Is the mouseenter Event?
mouseenter fires when the pointer enters the element it is bound to. Moving into a child does not fire it again (unlike mouseover). Bind with .on("mouseenter", handler) (jQuery 1.7+).
Remember
$("#outer").on("mouseenter", function () { ... })
$("#outer").trigger("mouseenter")
// Enter element → fires once
// Enter a child inside it → does NOT fire again
// Prefer on/trigger — not the deprecated .mouseenter()
Select the container, bind enter (and usually leave), avoid mouseover when children would spam handlers.
Select the element(s): $("#outer"), $(".card"), etc.
Bind: .on("mouseenter", function (event) { ... }).
Pair with .on("mouseleave", …) for hover-style UI.
To fire in code: .trigger("mouseenter"). Unbind with .off("mouseenter").
Piece
Required?
Role
"mouseenter"
Yes
Event type string for .on / .trigger
handler
Yes (bind)
Runs when the pointer enters the element
eventData
Optional
Extra data passed into the handler
Return value
—
jQuery set (chainable)
Pseudocode
Pseudocode
function onMouseenter(element, handler):
when pointer moves from outside element → inside element:
handler(event)
// moving into a child of element does NOT call handler again
trigger(element, "mouseenter"):
run all mouseenter handlers on element
Reference
Cheat Sheet
Keep these facts handy when choosing enter vs over.
Handler runs once for that enter — not again for children.
Example 2 — Trigger mouseenter from Code
Fire the same handlers with a click on another control.
jQuery
$("#outer").on("mouseenter", function () {
console.log("Handler for mouseenter called.");
});
$("#other").on("click", function () {
$("#outer").trigger("mouseenter");
});
Entering a child re-fires mouseover, not mouseenter.
jQuery
var enterCount = 0;
var overCount = 0;
$("#enterBox").on("mouseenter", function () {
enterCount += 1;
console.log("mouseenter:", enterCount);
});
$("#overBox").on("mouseover", function () {
overCount += 1;
console.log("mouseover:", overCount);
});
// Move into each box, then into its Inner child:
// mouseenter stays 1; mouseover increases again.
Most bugs come from using mouseover when you meant mouseenter.
children
Do not use mouseover for parent hover
Nested elements re-fire mouseover. Prefer mouseenter / mouseleave for cards and menus.
deprecated
Avoid .mouseenter() in new code
Use .on("mouseenter") / .trigger("mouseenter"). The method shorthand is deprecated since 3.3.
touch
No true hover on touch
Pointer enter/leave is mouse-oriented. Provide click/tap paths for touch UIs.
simulate
jQuery normalizes the event
Originally IE-only; jQuery simulates mouseenter so it works in all supported browsers.
Compatibility
Browser Support
.on("mouseenter") has shipped since jQuery 1.7 (.trigger("mouseenter") since 1.0). jQuery simulates mouseenter so it works in all modern browsers with jQuery loaded.
✓ jQuery 1.7+
mouseenter event
Pointer enters the bound element — without re-firing on child elements.
100%Browser support
Google ChromeAll versions · Desktop & Mobile
Full support
Mozilla FirefoxAll versions · Desktop & Mobile
Full support
Apple SafariAll versions · macOS & iOS
Full support
Microsoft EdgeAll versions · Chromium & Legacy
Full support
Internet ExplorerIE 6+ · Legacy environments
Full support
OperaAll modern versions
Full support
mouseenterExcellent
Bottom line: Bind with .on("mouseenter"). Prefer it over mouseover when the element has children.
Analysis
Performance Notes
Approach
Cost
Best for
mouseenter
Fewer calls
Parent hover with children
mouseover
More calls
When you truly need child enters
Heavy work in handler
Janky hover
Keep enter/leave light
Prefer mouseenter / mouseleave for UI hover — fewer accidental re-entries means less work and cleaner state.
Remember
Key Takeaways
Role: pointer enters the bound element.
vs over: children do not re-fire mouseenter.
API: use .on / .trigger, not the shorthand.
Pair:mouseleave or .hover().
One line:.on("mouseenter") for enter-once hover — use it when the element has children.
Frequently Asked Questions
mouseenter fires when the pointer enters the bound element. Unlike mouseover, moving into a child does not fire it again. Bind with .on("mouseenter", handler) (jQuery 1.7+). jQuery simulates the event across browsers.
Prefer .on("mouseenter", handler). The .mouseenter(handler) shorthand is deprecated since jQuery 3.3. To fire the event, use .trigger("mouseenter") instead of .mouseenter().
mouseover bubbles and also fires when the pointer moves from parent into a child. mouseenter does not — it fires once when entering the element it is bound to, not when entering descendants.
Use mouseleave for when the pointer leaves the element (same non-child-bubbling behavior). .hover(enterFn, leaveFn) is a convenience that wires both.
Call $(selector).trigger("mouseenter"). That runs bound handlers without needing a real pointer move.
No — that is the point versus mouseover. Handlers on an ancestor are not triggered by entering a descendant of the bound element.