Bug Tracker

Opened 14 years ago

Closed 12 years ago

#5884 closed bug (fixed)

live mouseenter/mouseleave events don't fire as expected when nested

Reported by: oyejorge Owned by: brandon
Priority: low Milestone: 1.6
Component: event Version: 1.4
Keywords: live mouseenter mouseleave Cc:
Blocked by: Blocking:


I found that when using the mouseenter/mouseleave events with the .live() method, the results were not the same as if I used the .bind() method.

When using the bind() method a nested mouseenter will not trigger the outer mouseleave. But when using live() the outer mouseleave will be triggered.

See attached test document.

Thanks for this amazing product!

Attachments (1)

mouseenter.html (1.2 KB) - added by oyejorge 14 years ago.
Shows differences between bind() and live() with mouseenter/mouseleave

Download all attachments as: .zip

Change History (5)

Changed 14 years ago by oyejorge

Attachment: mouseenter.html added

Shows differences between bind() and live() with mouseenter/mouseleave

comment:1 Changed 13 years ago by Licensed to Gil

I've also found this issue and narrowed it down - it only occurs when the parent and child elements have the events bound with the same selector.


// Problem occurs:
$('#outer, #inner').live('mouseenter mouseleave', handler);

// No problem:
$('#outer').live('mouseenter mouseleave', handler);
$('#inner').live('mouseenter mouseleave', handler);

Basically, the live event handler code in jQuery is only checking if the selectors are different instead of checking the parent/child relationship.

I've got a quick patch here:




comment:2 Changed 13 years ago by SlexAxton

Milestone: 1.41.5
Priority: majorlow
Status: newopen

comment:3 Changed 12 years ago by john

Milestone: 1.6

comment:4 Changed 12 years ago by Gilmore Davidson

Resolution: fixed
Status: openclosed

Added check for live mouseenter/mouseleave events if bound to nested elements with the same selector. Fixes #5884.

Changeset: a9b81d759af3a4574a42ca1de93be1247f7953a2

Note: See TracTickets for help on using tickets.