X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent.js;h=e667ddbdc251b2a0a18e23265bb2160d7185113e;hb=da5706c974f8ef720b3194179366e1096c19269e;hp=f0b27de436f1d73ff5c2eef13bb646834bf48833;hpb=a44ec402771f6d622506f39073d0be260400dd21;p=jquery.git diff --git a/src/event.js b/src/event.js index f0b27de..e667ddb 100644 --- a/src/event.js +++ b/src/event.js @@ -1,10 +1,12 @@ (function( jQuery ) { var rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspace = / /g, + rescape = /[^\w\s.|`]/g, fcleanup = function( nm ) { - return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { - return "\\" + ch; - }); + return nm.replace(rescape, "\\$&"); }; /* @@ -23,7 +25,7 @@ jQuery.event = { // For whatever reason, IE has trouble passing the window object // around, causing it to be cloned in the process - if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { + if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { elem = window; } @@ -239,7 +241,7 @@ jQuery.event = { // remove generic event handler if no more handlers exist if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - removeEvent( elem, type, elemData.handle ); + jQuery.removeEvent( elem, type, elemData.handle ); } ret = null; @@ -339,7 +341,7 @@ jQuery.event = { jQuery.event.trigger( event, data, parent, true ); } else if ( !event.isDefaultPrevented() ) { - var target = event.target, old, targetType = type.replace(/\..*$/, ""), + var target = event.target, old, targetType = type.replace(rnamespaces, ""), isClick = jQuery.nodeName(target, "a") && targetType === "click", special = jQuery.event.special[ targetType ] || {}; @@ -513,7 +515,7 @@ jQuery.event = { beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows - if ( this.setInterval ) { + if ( jQuery.isWindow( this ) ) { this.onbeforeunload = eventHandle; } }, @@ -527,7 +529,7 @@ jQuery.event = { } }; -var removeEvent = document.removeEventListener ? +jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); @@ -583,9 +585,11 @@ jQuery.Event.prototype = { // 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) - e.returnValue = false; + } else { + e.returnValue = false; + } }, stopPropagation: function() { this.isPropagationStopped = returnTrue; @@ -695,9 +699,7 @@ if ( !jQuery.support.submitBubbles ) { // change delegation, happens here so we have bind. if ( !jQuery.support.changeBubbles ) { - var formElems = /textarea|input|select/i, - - changeFilters, + var changeFilters, getVal = function( elem ) { var type = elem.type, val = elem.value; @@ -722,7 +724,7 @@ if ( !jQuery.support.changeBubbles ) { testChange = function testChange( e ) { var elem = e.target, data, val; - if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { + if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { return; } @@ -786,13 +788,13 @@ if ( !jQuery.support.changeBubbles ) { jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); } - return formElems.test( this.nodeName ); + return rformElems.test( this.nodeName ); }, teardown: function( namespaces ) { jQuery.event.remove( this, ".specialChange" ); - return formElems.test( this.nodeName ); + return rformElems.test( this.nodeName ); } }; @@ -942,6 +944,14 @@ jQuery.each(["live", "die"], function( i, name ) { 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; + } if ( jQuery.isFunction( data ) ) { fn = data; @@ -993,7 +1003,7 @@ jQuery.each(["live", "die"], function( i, name ) { function liveHandler( event ) { var stop, maxLevel, elems = [], selectors = [], - related, match, handleObj, elem, j, i, l, data, close, namespace, + related, match, handleObj, elem, j, i, l, data, close, namespace, ret, events = jQuery.data( this, "events" ); // Make sure we avoid non-left-click bubbling in Firefox (#3861) @@ -1071,7 +1081,7 @@ function liveHandler( event ) { } function liveConvert( type, selector ) { - return (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); } jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +