]> source.dussan.org Git - jquery.git/commitdiff
No ticket: compress event.js
authorRichard Gibson <richard.gibson@gmail.com>
Sat, 12 Jan 2013 22:11:07 +0000 (17:11 -0500)
committerRichard Gibson <richard.gibson@gmail.com>
Sat, 12 Jan 2013 22:11:07 +0000 (17:11 -0500)
src/effects.js
src/event.js

index 7ab3a0869d061e1110b608a806a0f1dfe8c02ef2..f725210247a142d68d3c83d180cd652a65082971 100644 (file)
@@ -161,9 +161,9 @@ function Animation( elem, properties, options ) {
 
        jQuery.fx.timer(
                jQuery.extend( tick, {
+                       elem: elem,
                        anim: animation,
-                       queue: animation.opts.queue,
-                       elem: elem
+                       queue: animation.opts.queue
                })
        );
 
index adaba76735c95eb302863a7641d0dfd6ee139c19..5a57fe9f6526c0bef74403e135c6610e02099776 100644 (file)
@@ -4,20 +4,31 @@ var rformElems = /^(?:input|select|textarea)$/i,
        rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
        rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
 
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
 /*
  * Helper functions for managing events -- not part of the public interface.
  * Props to Dean Edwards' addEvent library for many of the ideas.
  */
 jQuery.event = {
 
+       global: {},
+
        add: function( elem, types, handler, data, selector ) {
-               var elemData, eventHandle, events,
-                       tns, type, namespaces, handleObj,
-                       handleObjIn, handlers, special,
-                       t = 0;
 
-               // Don't attach events to noData or text/comment nodes (allow plain objects tho)
-               if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+               var handleObjIn, eventHandle, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       // Don't attach events to noData or text/comment nodes (but allow plain objects)
+                       elemData = elem.nodeType !== 3 && elem.nodeType !== 8 && jQuery._data( elem );
+
+               if ( !elemData ) {
                        return;
                }
 
@@ -34,13 +45,11 @@ jQuery.event = {
                }
 
                // Init the element's event structure and main handler, if this is the first
-               events = elemData.events;
-               if ( !events ) {
-                       elemData.events = events = {};
+               if ( !(events = elemData.events) ) {
+                       events = elemData.events = {};
                }
-               eventHandle = elemData.handle;
-               if ( !eventHandle ) {
-                       elemData.handle = eventHandle = function( e ) {
+               if ( !(eventHandle = elemData.handle) ) {
+                       eventHandle = elemData.handle = function( e ) {
                                // Discard the second event of a jQuery.event.trigger() and
                                // when an event is called after a page has unloaded
                                return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
@@ -54,11 +63,11 @@ jQuery.event = {
                // Handle multiple events separated by a space
                // jQuery(...).bind("mouseover mouseout", fn);
                types = ( types || "" ).match( core_rnotwhite ) || [""];
-               for ( ; t < types.length; t++ ) {
-
-                       tns = rtypenamespace.exec( types[t] ) || [];
-                       type = tns[1];
-                       namespaces = ( tns[2] || "" ).split( "." ).sort();
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[t] ) || [];
+                       type = origType = tmp[1];
+                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
 
                        // If event changes its type, use the special event handlers for the changed type
                        special = jQuery.event.special[ type ] || {};
@@ -72,7 +81,7 @@ jQuery.event = {
                        // handleObj is passed to all event handlers
                        handleObj = jQuery.extend({
                                type: type,
-                               origType: tns[1],
+                               origType: origType,
                                data: data,
                                handler: handler,
                                guid: handler.guid,
@@ -82,8 +91,7 @@ jQuery.event = {
                        }, handleObjIn );
 
                        // Init the event handler queue if we're the first
-                       handlers = events[ type ];
-                       if ( !handlers ) {
+                       if ( !(handlers = events[ type ]) ) {
                                handlers = events[ type ] = [];
                                handlers.delegateCount = 0;
 
@@ -122,14 +130,12 @@ jQuery.event = {
                elem = null;
        },
 
-       global: {},
-
        // Detach an event or set of events from an element
        remove: function( elem, types, handler, selector, mappedTypes ) {
 
-               var tns, type, origType, namespaces, origCount,
-                       j, events, special, eventType, handleObj,
-                       t = 0,
+               var j, origCount, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
                        elemData = jQuery.hasData( elem ) && jQuery._data( elem );
 
                if ( !elemData || !(events = elemData.events) ) {
@@ -138,10 +144,11 @@ jQuery.event = {
 
                // Once for each type.namespace in types; type may be omitted
                types = ( types || "" ).match( core_rnotwhite ) || [""];
-               for ( ; t < types.length; t++ ) {
-                       tns = rtypenamespace.exec( types[t] ) || [];
-                       type = origType = tns[1];
-                       namespaces = tns[2];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[t] ) || [];
+                       type = origType = tmp[1];
+                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
 
                        // Unbind all events (on this namespace, if provided) for the element
                        if ( !type ) {
@@ -152,23 +159,23 @@ jQuery.event = {
                        }
 
                        special = jQuery.event.special[ type ] || {};
-                       type = ( selector? special.delegateType : special.bindType ) || type;
-                       eventType = events[ type ] || [];
-                       origCount = eventType.length;
-                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       handlers = events[ type ] || [];
+                       tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
 
                        // Remove matching events
-                       for ( j = 0; j < eventType.length; j++ ) {
-                               handleObj = eventType[ j ];
+                       origCount = j = handlers.length;
+                       while ( j-- ) {
+                               handleObj = handlers[ j ];
 
                                if ( ( mappedTypes || origType === handleObj.origType ) &&
                                        ( !handler || handler.guid === handleObj.guid ) &&
-                                       ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
                                        ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-                                       eventType.splice( j--, 1 );
+                                       handlers.splice( j, 1 );
 
                                        if ( handleObj.selector ) {
-                                               eventType.delegateCount--;
+                                               handlers.delegateCount--;
                                        }
                                        if ( special.remove ) {
                                                special.remove.call( elem, handleObj );
@@ -178,7 +185,7 @@ jQuery.event = {
 
                        // Remove generic event handler if we removed something and no more handlers exist
                        // (avoids potential for endless recursion during removal of special event handlers)
-                       if ( eventType.length === 0 && origCount !== eventType.length ) {
+                       if ( origCount && !handlers.length ) {
                                if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
                                        jQuery.removeEvent( elem, type, elemData.handle );
                                }
@@ -199,11 +206,12 @@ jQuery.event = {
 
        trigger: function( event, data, elem, onlyHandlers ) {
 
-               var i, cur, old, ontype, special, handle, eventPath, bubbleType,
+               var i, cur, tmp, bubbleType, ontype, handle, special,
+                       eventPath = [ elem || document ],
                        type = event.type || event,
                        namespaces = event.namespace ? event.namespace.split(".") : [];
 
-               elem = elem || document;
+               cur = tmp = elem = elem || document;
 
                // Don't do events on text and comment nodes
                if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
@@ -221,21 +229,19 @@ jQuery.event = {
                        type = namespaces.shift();
                        namespaces.sort();
                }
+               ontype = type.indexOf(":") < 0 && "on" + type;
 
-               // Caller can pass in an Event, Object, or just an event type string
-               event = typeof event === "object" ?
-                       // jQuery.Event object
-                       event[ jQuery.expando ] ? event :
-                       // Object literal
-                       new jQuery.Event( type, event ) :
-                       // Just the event type (string)
-                       new jQuery.Event( type );
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
 
-               event.type = type;
                event.isTrigger = true;
+               event.type = type;
                event.namespace = namespaces.join(".");
-               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
-               ontype = type.indexOf(":") < 0 ? "on" + type : "";
+               event.namespace_re = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+                       null;
 
                // Clean up the event in case it is being reused
                event.result = undefined;
@@ -244,8 +250,9 @@ jQuery.event = {
                }
 
                // Clone any incoming data and prepend the event, creating the handler arg list
-               data = data != null ? jQuery.makeArray( data ) : [];
-               data.unshift( event );
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
 
                // Allow special events to draw outside the lines
                special = jQuery.event.special[ type ] || {};
@@ -255,33 +262,38 @@ jQuery.event = {
 
                // Determine event propagation path in advance, per W3C events spec (#9951)
                // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-               eventPath = [[ elem, special.bindType || type ]];
                if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
 
                        bubbleType = special.delegateType || type;
-                       cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-                       for ( old = elem; cur; cur = cur.parentNode ) {
-                               eventPath.push([ cur, bubbleType ]);
-                               old = cur;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
                        }
 
                        // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( old === (elem.ownerDocument || document) ) {
-                               eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+                       if ( tmp === (elem.ownerDocument || document) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
                        }
                }
 
                // Fire handlers on the event path
-               for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+               i = 0;
+               while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
 
-                       cur = eventPath[i][0];
-                       event.type = eventPath[i][1];
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
 
+                       // jQuery handler
                        handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
                        if ( handle ) {
                                handle.apply( cur, data );
                        }
-                       // Note that this is a bare JS function and not a jQuery handler
+
+                       // Native handler
                        handle = ontype && cur[ ontype ];
                        if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
                                event.preventDefault();
@@ -301,9 +313,9 @@ jQuery.event = {
                                if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
 
                                        // Don't re-trigger an onFOO event when we call its FOO() method
-                                       old = elem[ ontype ];
+                                       tmp = elem[ ontype ];
 
-                                       if ( old ) {
+                                       if ( tmp ) {
                                                elem[ ontype ] = null;
                                        }
 
@@ -317,8 +329,8 @@ jQuery.event = {
                                        }
                                        jQuery.event.triggered = undefined;
 
-                                       if ( old ) {
-                                               elem[ ontype ] = old;
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
                                        }
                                }
                        }
@@ -333,11 +345,11 @@ jQuery.event = {
                event = jQuery.event.fix( event );
 
                var i, j, cur, ret, selMatch, matched, matches, handleObj, sel,
-                       handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-                       delegateCount = handlers.delegateCount,
+                       handlerQueue = [],
                        args = core_slice.call( arguments ),
-                       special = jQuery.event.special[ event.type ] || {},
-                       handlerQueue = [];
+                       handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+                       delegateCount = handlers.delegateCount,
+                       special = jQuery.event.special[ event.type ] || {};
 
                // Use the fix-ed jQuery.Event rather than the (read-only) native event
                args[0] = event;
@@ -358,7 +370,8 @@ jQuery.event = {
                                if ( cur.disabled !== true || event.type !== "click" ) {
                                        selMatch = {};
                                        matches = [];
-                                       for ( i = 0; i < delegateCount; i++ ) {
+                                       i = 0;
+                                       for ( ; i < delegateCount; i++ ) {
                                                handleObj = handlers[ i ];
                                                sel = handleObj.selector;
 
@@ -372,7 +385,7 @@ jQuery.event = {
                                                }
                                        }
                                        if ( matches.length ) {
-                                               handlerQueue.push({ elem: cur, matches: matches });
+                                               handlerQueue.push({ elem: cur, handlers: matches });
                                        }
                                }
                        }
@@ -380,30 +393,29 @@ jQuery.event = {
 
                // Add the remaining (directly-bound) handlers
                if ( handlers.length > delegateCount ) {
-                       handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+                       handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
                }
 
                // Run delegates first; they may want to stop propagation beneath us
-               for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-                       matched = handlerQueue[ i ];
+               i = 0;
+               while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
                        event.currentTarget = matched.elem;
 
-                       for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-                               handleObj = matched.matches[ j ];
+                       j = 0;
+                       while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
 
                                // Triggered event must either 1) have no namespace, or
                                // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-                               if ( !event.namespace || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+                               if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
 
-                                       event.data = handleObj.data;
                                        event.handleObj = handleObj;
+                                       event.data = handleObj.data;
 
                                        ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
                                                        .apply( matched.elem, args );
 
                                        if ( ret !== undefined ) {
-                                               event.result = ret;
-                                               if ( ret === false ) {
+                                               if ( (event.result = ret) === false ) {
                                                        event.preventDefault();
                                                        event.stopPropagation();
                                                }
@@ -420,6 +432,44 @@ jQuery.event = {
                return event.result;
        },
 
+       fix: function( event ) {
+               if ( event[ jQuery.expando ] ) {
+                       return event;
+               }
+
+               // Create a writable copy of the event object and normalize some properties
+               var i, prop,
+                       originalEvent = event,
+                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
+                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+               event = new jQuery.Event( originalEvent );
+
+               i = copy.length;
+               while ( i-- ) {
+                       prop = copy[ i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
+
+               // Support: IE<9
+               // Fix target property (#1925)
+               if ( !event.target ) {
+                       event.target = originalEvent.srcElement || document;
+               }
+
+               // Support: Safari
+               // Target should not be a text node (#504)
+               if ( event.target.nodeType === 3 ) {
+                       event.target = event.target.parentNode;
+               }
+
+               // Support: IE<9
+               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+               event.metaKey = !!event.metaKey;
+
+               return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+       },
+
        // Includes some event props shared by KeyEvent and MouseEvent
        props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
 
@@ -470,40 +520,6 @@ jQuery.event = {
                }
        },
 
-       fix: function( event ) {
-               if ( event[ jQuery.expando ] ) {
-                       return event;
-               }
-
-               // Create a writable copy of the event object and normalize some properties
-               var i, prop,
-                       originalEvent = event,
-                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
-                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-               event = jQuery.Event( originalEvent );
-
-               for ( i = copy.length; i; ) {
-                       prop = copy[ --i ];
-                       event[ prop ] = originalEvent[ prop ];
-               }
-
-               // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-               if ( !event.target ) {
-                       event.target = originalEvent.srcElement || document;
-               }
-
-               // Target should not be a text node (#504, Safari)
-               if ( event.target.nodeType === 3 ) {
-                       event.target = event.target.parentNode;
-               }
-
-               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
-               event.metaKey = !!event.metaKey;
-
-               return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-       },
-
        special: {
                load: {
                        // Prevent triggered image.load events from bubbling to window.load
@@ -512,7 +528,7 @@ jQuery.event = {
                click: {
                        // For checkbox, fire native event so checked state will be right
                        trigger: function() {
-                               if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+                               if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
                                        this.click();
                                        return false;
                                }
@@ -526,8 +542,9 @@ jQuery.event = {
                                                this.focus();
                                                return false;
                                        } catch ( e ) {
-                                               // IE<9 dies on focus to hidden element (#1486,#12518)
-                                               // If this happens, let .trigger() run the handlers
+                                               // Support: IE<9
+                                               // If we error on focus to hidden element (#1486, #12518),
+                                               // let .trigger() run the handlers
                                        }
                                }
                        },
@@ -577,10 +594,6 @@ jQuery.event = {
        }
 };
 
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
 jQuery.removeEvent = document.removeEventListener ?
        function( elem, type, handle ) {
                if ( elem.removeEventListener ) {
@@ -635,54 +648,51 @@ jQuery.Event = function( src, props ) {
        this[ jQuery.expando ] = true;
 };
 
-function returnFalse() {
-       return false;
-}
-function returnTrue() {
-       return true;
-}
-
 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
 // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
 jQuery.Event.prototype = {
-       preventDefault: function() {
-               this.isDefaultPrevented = returnTrue;
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse,
 
+       preventDefault: function() {
                var e = this.originalEvent;
+
+               this.isDefaultPrevented = returnTrue;
                if ( !e ) {
                        return;
                }
 
-               // if preventDefault exists run it on the original event
+               // If preventDefault exists, run it on the original event
                if ( e.preventDefault ) {
                        e.preventDefault();
 
-               // otherwise set the returnValue property of the original event to false (IE)
+               // Support: IE
+               // Otherwise set the returnValue property of the original event to false
                } else {
                        e.returnValue = false;
                }
        },
        stopPropagation: function() {
-               this.isPropagationStopped = returnTrue;
-
                var e = this.originalEvent;
+
+               this.isPropagationStopped = returnTrue;
                if ( !e ) {
                        return;
                }
-               // if stopPropagation exists run it on the original event
+               // If stopPropagation exists, run it on the original event
                if ( e.stopPropagation ) {
                        e.stopPropagation();
                }
-               // otherwise set the cancelBubble property of the original event to true (IE)
+
+               // Support: IE
+               // Set the cancelBubble property of the original event to true
                e.cancelBubble = true;
        },
        stopImmediatePropagation: function() {
                this.isImmediatePropagationStopped = returnTrue;
                this.stopPropagation();
-       },
-       isDefaultPrevented: returnFalse,
-       isPropagationStopped: returnFalse,
-       isImmediatePropagationStopped: returnFalse
+       }
 };
 
 // Create mouseenter/leave events using mouseover/out and event-time checks
@@ -727,11 +737,11 @@ if ( !jQuery.support.submitBubbles ) {
                                // Node name check avoids a VML-related crash in IE (#9807)
                                var elem = e.target,
                                        form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                               if ( form && !jQuery._data( form, "_submit_attached" ) ) {
+                               if ( form && !jQuery._data( form, "submitBubbles" ) ) {
                                        jQuery.event.add( form, "submit._submit", function( event ) {
                                                event._submit_bubble = true;
                                        });
-                                       jQuery._data( form, "_submit_attached", true );
+                                       jQuery._data( form, "submitBubbles", true );
                                }
                        });
                        // return undefined since we don't need an event listener
@@ -790,13 +800,13 @@ if ( !jQuery.support.changeBubbles ) {
                        jQuery.event.add( this, "beforeactivate._change", function( e ) {
                                var elem = e.target;
 
-                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
+                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
                                        jQuery.event.add( elem, "change._change", function( event ) {
                                                if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
                                                        jQuery.event.simulate( "change", this.parentNode, event, true );
                                                }
                                        });
-                                       jQuery._data( elem, "_change_attached", true );
+                                       jQuery._data( elem, "changeBubbles", true );
                                }
                        });
                },
@@ -851,7 +861,7 @@ jQuery.fn.extend({
                // Types can be a map of types/handlers
                if ( typeof types === "object" ) {
                        // ( types-Object, selector, data )
-                       if ( typeof selector !== "string" ) { // && selector != null
+                       if ( typeof selector !== "string" ) {
                                // ( types-Object, data )
                                data = data || selector;
                                selector = undefined;
@@ -954,8 +964,9 @@ jQuery.fn.extend({
                });
        },
        triggerHandler: function( type, data ) {
-               if ( this[0] ) {
-                       return jQuery.event.trigger( type, data, this[0], true );
+               var elem = this[0];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
                }
        },