From: Colin Snover Date: Thu, 30 Dec 2010 06:02:56 +0000 (-0600) Subject: Merge branch 'fix7762' into jquery master. Fixes #7762. X-Git-Url: http://git.asbjorn.it/?a=commitdiff_plain;h=429b078dc7b5cf7765b44c8d32e125ecd8f1e2c9;hp=-c;p=jquery.git Merge branch 'fix7762' into jquery Fixes #7762. --- 429b078dc7b5cf7765b44c8d32e125ecd8f1e2c9 diff --combined src/event.js index c904734,b66cfab..675e5ff --- a/src/event.js +++ b/src/event.js @@@ -63,7 -63,7 +63,7 @@@ jQuery.event = var eventKey = elem.nodeType ? "events" : "__events__", events = elemData[ eventKey ], eventHandle = elemData.handle; - + if ( typeof events === "function" ) { // On plain objects events is a fn that holds the the data // which prevents this data from being JSON serialized @@@ -143,9 -143,9 +143,9 @@@ } } } - - if ( special.add ) { - special.add.call( elem, handleObj ); + + if ( special.add ) { + special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; @@@ -184,7 -184,7 +184,7 @@@ if ( !elemData || !events ) { return; } - + if ( typeof events === "function" ) { elemData = events; events = events.events; @@@ -222,7 -222,7 +222,7 @@@ namespaces = type.split("."); type = namespaces.shift(); - namespace = new RegExp("(^|\\.)" + + namespace = new RegExp("(^|\\.)" + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); } @@@ -384,7 -384,7 +384,7 @@@ isClick = jQuery.nodeName( target, "a" ) && targetType === "click", special = jQuery.event.special[ targetType ] || {}; - if ( (!special._default || special._default.call( elem, event ) === false) && + if ( (!special._default || special._default.call( elem, event ) === false) && !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { try { @@@ -454,7 -454,7 +454,7 @@@ event.handler = handleObj.handler; event.data = handleObj.data; event.handleObj = handleObj; - + var ret = handleObj.handler.apply( this, args ); if ( ret !== undefined ) { @@@ -553,7 -553,7 +553,7 @@@ add: function( handleObj ) { jQuery.event.add( this, liveConvert( handleObj.origType, handleObj.selector ), - jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); }, remove: function( handleObj ) { @@@ -583,7 -583,7 +583,7 @@@ jQuery.removeEvent = document.removeEve if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } - } : + } : function( elem, type, handle ) { if ( elem.detachEvent ) { elem.detachEvent( "on" + type, handle ); @@@ -600,12 -600,6 +600,12 @@@ jQuery.Event = function( src ) if ( src && src.type ) { this.originalEvent = src; this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + // Event type } else { this.type = src; @@@ -636,7 -630,7 +636,7 @@@ jQuery.Event.prototype = if ( !e ) { return; } - + // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); @@@ -732,7 -726,7 +732,7 @@@ if ( !jQuery.support.submitBubbles ) return trigger( "submit", this, arguments ); } }); - + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { var elem = e.target, type = elem.type; @@@ -794,7 -788,7 +794,7 @@@ if ( !jQuery.support.changeBubbles ) if ( e.type !== "focusout" || elem.type !== "radio" ) { jQuery.data( elem, "_change_data", val ); } - + if ( data === undefined || val === data ) { return; } @@@ -808,7 -802,7 +808,7 @@@ jQuery.event.special.change = { filters: { - focusout: testChange, + focusout: testChange, beforedeactivate: testChange, @@@ -879,15 -873,15 +879,15 @@@ if ( document.addEventListener ) if ( focusCounts[fix]++ === 0 ) { document.addEventListener( orig, handler, true ); } - }, - teardown: function() { + }, + teardown: function() { if ( --focusCounts[fix] === 0 ) { document.removeEventListener( orig, handler, true ); } } }; - function handler( e ) { + function handler( e ) { e = jQuery.event.fix( e ); e.type = fix; return jQuery.event.trigger( e, null, e.target ); @@@ -904,7 -898,7 +904,7 @@@ jQuery.each(["bind", "one"], function( } return this; } - + if ( jQuery.isFunction( data ) || data === false ) { fn = data; data = undefined; @@@ -944,20 -938,20 +944,20 @@@ jQuery.fn.extend( return this; }, - + delegate: function( selector, types, data, fn ) { return this.live( types, data, fn, selector ); }, - + undelegate: function( selector, types, fn ) { if ( arguments.length === 0 ) { return this.unbind( "live" ); - + } else { return this.die( types, null, fn, selector ); } }, - + trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); @@@ -1014,12 -1008,12 +1014,12 @@@ jQuery.each(["live", "die"], function( var type, i = 0, match, namespaces, preType, selector = origSelector || this.selector, context = origSelector ? this : jQuery( this.context ); - + if ( typeof types === "object" && !types.preventDefault ) { for ( var key in types ) { context[ name ]( key, data, types[key], selector ); } - + return this; } @@@ -1066,7 -1060,7 +1066,7 @@@ context.unbind( "live." + liveConvert( type, selector ), fn ); } } - + return this; }; }); @@@ -1085,7 -1079,7 +1085,7 @@@ function liveHandler( event ) if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { return; } - + if ( event.namespace ) { namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); } @@@ -1183,21 -1177,4 +1183,4 @@@ jQuery.each( ("blur focus focusin focus } }); - // Prevent memory leaks in IE - // Window isn't included so as not to unbind existing unload events - // More info: - // - http://isaacschlueter.com/2006/10/msie-memory-leaks/ - if ( window.attachEvent && !window.addEventListener ) { - jQuery(window).bind("unload", function() { - for ( var id in jQuery.cache ) { - if ( jQuery.cache[ id ].handle ) { - // Try/Catch is to handle iframes being unloaded, see #4280 - try { - jQuery.event.remove( jQuery.cache[ id ].handle.elem ); - } catch(e) {} - } - } - }); - } - })( jQuery );