Prevent a single event object from being fixed more than once
[jquery.git] / src / event.js
index 5b77e8c..2d9bdc2 100644 (file)
@@ -185,7 +185,7 @@ jQuery.event = {
                        
                        // Pass along a fake event
                        if ( event )
-                               data.unshift( this.fix({ type: type, target: elem }) );
+                               data.unshift( { type: type, target: elem } );
 
                        // Enforce the right trigger type
                        data[0].type = type;
@@ -268,17 +268,23 @@ jQuery.event = {
                // Clean up added properties in IE to prevent memory leak
                if (jQuery.browser.msie)
                        event.target = event.preventDefault = event.stopPropagation =
-                               event.handler = event.data = null;
+                               event.handler = event.data = event[expando] = null;
 
                return val;
        },
 
        fix: function(event) {
+               if ( event[expando] == true ) 
+                       return event;
+               
                // store a copy of the original event object 
                // and clone to set read-only properties
                var originalEvent = event;
                event = jQuery.extend({}, originalEvent);
                
+               // Mark it as fixed
+               event[expando] = true;
+               
                // add preventDefault and stopPropagation since 
                // they will not work on the clone
                event.preventDefault = function() {