- var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
- // Check to see if we need to provide a fake event, or not
- event = !data[0] || !data[0].preventDefault;
-
- // Pass along a fake event
- if ( event ) {
- data.unshift({
- type: type,
- target: elem,
- preventDefault: function(){},
- stopPropagation: function(){},
- stopImmediatePropagation:stopImmediatePropagation,
- timeStamp: now()
- });
- data[0][expando] = true; // no need to fix fake event
+ // Clone the incoming data, if any
+ data = jQuery.makeArray(data);
+
+ if ( type.indexOf("!") >= 0 ) {
+ type = type.slice(0, -1);
+ var exclusive = true;
+ }
+
+ e = typeof e === "object" ?
+ // jQuery.Event object
+ e[expando] ? e :
+ // Object literal
+ jQuery.extend( jQuery.Event(type), e ) :
+ // Just the event type (string)
+ jQuery.Event(type);
+
+ e.target = e.target || elem;
+ e.currentTarget = elem;
+ e.exclusive = exclusive;
+
+ data.unshift( e );
+
+ var val, ret, fn = jQuery.isFunction( elem[ type ] );
+
+ if ( dohandlers !== false ) {
+ // Trigger the event, it is assumed that "handle" is a function
+ var handle = jQuery.data(elem, "handle");
+ if ( handle )
+ val = handle.apply( elem, data );
+
+ // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
+ if ( (!fn || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
+ val = false;