]> source.dussan.org Git - jquery.git/commitdiff
Remove the relatedTarget adjustment for mouseenter/leave events, it's an ambiguous...
authorDave Methvin <dave.methvin@gmail.com>
Thu, 8 Sep 2011 13:03:16 +0000 (09:03 -0400)
committertimmywil <timmywillisn@gmail.com>
Mon, 19 Sep 2011 19:42:31 +0000 (15:42 -0400)
src/event.js
test/hovertest.html

index c5c5ca66b19a0d93e2406d5f05b283461363adc7..560c5cf8dcafecba270c8897ae83e4e12efcf049 100644 (file)
@@ -699,8 +699,7 @@ jQuery.Event.prototype = {
        isImmediatePropagationStopped: returnFalse
 };
 
-// Create mouseenter and mouseleave events; IE has its own native ones but
-// we need to support event delegation as well so we don't use them.
+// Create mouseenter/leave events using mouseover/out and event-time checks
 jQuery.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout"
@@ -716,12 +715,9 @@ jQuery.each({
                                selector = handleObj.selector,
                                oldType, ret;
 
+                       // For a real mouseover/out, always call the handler; for
+                       // mousenter/leave call the handler if related is outside the target.
                        // NB: No relatedTarget if the mouse left/entered the browser window
-                       if ( selector && related ) {
-                               // Delegated event; find the real relatedTarget
-                               related = jQuery( related ).closest( selector )[0];
-                       }
-                       // For mouseover/out, contains isn't needed; handle() already determined it's the right target
                        if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) {
                                oldType = event.type;
                                event.type = handleObj.origType;
index 4c101ec00dc37fbf05ed3248c892ab0373cacd01..d6242091ed0606849e55b98542cbd48482e69224 100644 (file)
@@ -44,8 +44,7 @@ p {
                Mouse over here should NOT trigger the counter.
        </div>
        </div>
-
-       <div id="livebox" class="hover-box">
+       <div id="liveenterbox" class="hover-box">
        <div class="hover-status">
                        <button>Activate</button>
                        Live enter/leave: <span class="ins">0</span> / <span class="outs">0</span>
@@ -54,7 +53,6 @@ p {
                Mouse over here should NOT trigger the counter.
        </div>
        </div>
-
        <div id="delegateenterbox" class="hover-box">
        <div class="hover-status">
                        <button>Activate</button>
@@ -74,6 +72,15 @@ p {
                Mouse over here SHOULD trigger the counter.
        </div>
        </div>
+       <div id="liveoverbox" class="hover-box">
+       <div class="hover-status">
+                       <button>Activate</button>
+                       Live over/out: <span class="ins">0</span> / <span class="outs">0</span>
+               </div>
+       <div class="hover-inside">
+               Mouse over here SHOULD trigger the counter.
+       </div>
+       </div>
        <div id="delegateoverbox" class="hover-box">
        <div class="hover-status">
                        <button>Activate</button>
@@ -115,8 +122,8 @@ $(function(){
                        .delegate("#delegateenterbox", "mouseleave", countOuts );
                $(this).remove();
        });
-       $("#livebox button").click(function(){
-               $("#livebox")
+       $("#liveenterbox button").click(function(){
+               $("#liveenterbox")
                        .data({ ins: 0, outs: 0 })
                        .live("mouseenter", countIns )
                        .live("mouseleave", countOuts );
@@ -130,6 +137,13 @@ $(function(){
                        .bind("mouseout", countOuts );
                $(this).remove();
        });
+       $("#liveoverbox button").click(function(){
+               $("#liveoverbox")
+                       .data({ ins: 0, outs: 0 })
+                       .live("mouseover", countIns )
+                       .live("mouseout", countOuts );
+               $(this).remove();
+       });
        $("#delegateoverbox button").click(function(){
                $(document)
                        .find("#delegateoverbox").data({ ins: 0, outs: 0 }).end()