Bug Tracker

Ticket #5259: patchEvent.txt

File patchEvent.txt, 1.7 KB (added by lrbabe, 13 years ago)
Line 
1Index: event.js
2===================================================================
3--- event.js    (revision 6581)
4+++ event.js    (working copy)
5@@ -517,7 +517,13 @@
6                // handle event if we actually just moused on to a non sub-element
7                jQuery.event.handle.apply( this, arguments );
8        }
9-};
10+},
11+       // In case of event delegation, all mouseout and mouseover events
12+       // should be passed to the liveHandler
13+       delegate = function( event ) {
14+               event.type = event.data;
15+               jQuery.event.handle.apply( this, arguments );
16+       };
17 
18 // Create mouseenter and mouseleave events
19 jQuery.each({
20@@ -525,11 +531,11 @@
21        mouseout: "mouseleave"
22 }, function( orig, fix ) {
23        jQuery.event.special[ fix ] = {
24-               setup: function(){
25-                       jQuery.event.add( this, orig, withinElement, fix );
26+               setup: function(data){
27+                       jQuery.event.add( this, orig, data && data.selector? delegate : withinElement, fix );
28                },
29-               teardown: function(){
30-                       jQuery.event.remove( this, orig, withinElement );
31+               teardown: function(data){
32+                       jQuery.event.remove( this, orig, data && data.selector? delegate : withinElement );
33                }
34        };
35 });
36@@ -743,9 +749,16 @@
37 
38        jQuery.each( jQuery.data( this, "events" ).live || [], function( i, fn ) {
39                if ( fn.live === event.type ) {
40-                       var elem = jQuery( event.target ).closest( fn.selector )[0];
41+                       var elem = jQuery( event.target ).closest( fn.selector )[0],
42+                               related;
43                        if ( elem ) {
44-                               elems.push({ elem: elem, fn: fn });
45+                               // Those two events require additional checking
46+                               if(fn.live == "mouseenter" || fn.live == "mouseleave") {
47+                                       related = jQuery( event.relatedTarget ).closest( fn.selector )[0];
48+                               }
49+                               if(!related || related != elem) {
50+                                       elems.push({ elem: elem, fn: fn });
51+                               }
52                        }
53                }
54        });