// Init the element's event structure
var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),
- handle = jQuery.data( elem, "handle" ) || jQuery.data( elem, "handle", function() {
+ handle = jQuery.data( elem, "handle" ) || jQuery.data( elem, "handle", function eventHandle() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
- jQuery.event.handle.apply( arguments.callee.elem, arguments ) :
+ jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
});
// Add elem as a property of the handle function
var nativeFn, nativeHandler;
try {
- nativeFn = elem[ type ];
- nativeHandler = elem[ "on" + type ];
+ if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
+ nativeFn = elem[ type ];
+ nativeHandler = elem[ "on" + type ];
+ }
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (e) {}
if ( !bubbling && nativeFn && !event.isDefaultPrevented() && !isClick ) {
this.triggered = true;
try {
- nativeFn();
+ elem[ type ]();
// prevent IE from throwing an error for some hidden elements
} catch (e) {}
// Handle triggering native .onfoo handlers
- } else if ( nativeHandler && nativeHandler.apply( elem, data ) === false ) {
+ } else if ( nativeHandler && elem[ "on" + type ].apply( elem, data ) === false ) {
event.result = false;
}
}
function liveConvert( type, selector ) {
- return ["live", type, selector//.replace(/[^\w\s\.]/g, function(ch){ return "\\"+ch})
- .replace(/\./g, "`")
- .replace(/ /g, "|")].join(".");
+ return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "&")].join(".");
}
jQuery.each( ("blur focus load resize scroll unload click dblclick " +
jQuery.fn[ name ] = function( fn ) {
return fn ? this.bind( name, fn ) : this.trigger( name );
};
+
+ if ( jQuery.fnAttr ) {
+ jQuery.fnAttr[ name ] = true;
+ }
});
// Prevent memory leaks in IE
for ( var id in jQuery.cache ) {
// Skip the window
if ( id != 1 && jQuery.cache[ id ].handle ) {
- jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+ // Try/Catch is to handle iframes being unloaded, see #4280
+ try {
+ jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+ } catch(e) {}
}
}
});