Prevent a single event object from being fixed more than once
[jquery.git] / src / event.js
index 25161d3..2d9bdc2 100644 (file)
@@ -160,7 +160,7 @@ jQuery.event = {
 
        trigger: function(type, data, elem, donative, extra) {
                // Clone the incoming data, if any
-               data = jQuery.makeArray(data || []);
+               data = jQuery.makeArray(data);
 
                if ( type.indexOf("!") >= 0 ) {
                        type = type.slice(0, -1);
@@ -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() {