+ event.currentTarget = elem;
+
+ // Trigger the event, it is assumed that "handle" is a function
+ var handle = jQuery.data( elem, "handle" );
+ if ( handle ) {
+ handle.apply( elem, data );
+ }
+
+ var nativeFn, nativeHandler;
+ try {
+ nativeFn = elem[ type ];
+ nativeHandler = elem[ "on" + type ];
+ // prevent IE from throwing an error for some elements with some event types, see #3533
+ } catch (e) {}
+ // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
+ if ( (!nativeFn || (jQuery.nodeName(elem, 'a') && type === "click")) && nativeHandler && nativeHandler.apply( elem, data ) === false ) {
+ event.result = false;
+ }
+
+ // Trigger the native events (except for clicks on links)
+ if ( !bubbling && nativeFn && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type === "click") ) {
+ this.triggered = true;
+ try {
+ nativeFn();
+ // prevent IE from throwing an error for some hidden elements
+ } catch (e) {}
+ }
+
+ this.triggered = false;
+
+ if ( !event.isPropagationStopped() ) {
+ var parent = elem.parentNode || elem.ownerDocument;
+ if ( parent ) {
+ jQuery.event.trigger( event, data, parent, true );
+ }
+ }