From: John Resig Date: Thu, 26 Oct 2006 16:09:55 +0000 (+0000) Subject: Rolled back Joern's changes. They've been moved to another branch, and will be merged... X-Git-Tag: 1.0.3~10 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=476cbd2f1afd39e32feb350a732877c18f9f7715;p=jquery.git Rolled back Joern's changes. They've been moved to another branch, and will be merged for 1.1. --- diff --git a/src/event/event.js b/src/event/event.js index 55e205ae2..a60c4616a 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -1583,8 +1583,8 @@ new function(){ var o = e[i]; // Handle event binding - jQuery.fn[o] = function(f, amount){ - return f ? this.bind(o, f, amount) : this.trigger(o); + jQuery.fn[o] = function(f){ + return f ? this.bind(o, f) : this.trigger(o); }; // Handle event unbinding @@ -1592,8 +1592,20 @@ new function(){ // Finally, handle events that only fire once jQuery.fn["one"+o] = function(f){ - // use bind with amount param to bind only once - return this.bind(o, f, 1); + // Attach the event listener + return this.each(function(){ + + var count = 0; + + // Add the event + jQuery.event.add( this, o, function(e){ + // If this function has already been executed, stop + if ( count++ ) return true; + + // And execute the bound function + return f.apply(this, [e]); + }); + }); }; }; diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 65f842381..9561ea9de 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -2271,7 +2271,7 @@ jQuery.extend({ handle: function(event) { if ( typeof jQuery == "undefined" ) return false; - event = jQuery.event.fix( event ); + event = event || jQuery.event.fix( window.event ); // If no correct event was found, fail if ( !event ) return false; @@ -2295,19 +2295,16 @@ jQuery.extend({ }, fix: function(event) { - if(jQuery.browser.msie) { - event = window.event; + if ( event ) { event.preventDefault = function() { this.returnValue = false; }; + event.stopPropagation = function() { this.cancelBubble = true; }; - event.target = event.srcElement; - } else if(jQuery.browser.safari && event.target.nodeType == 3) { - event = jQuery.extend({}, event); - event.target = event.target.parentNode; } + return event; } @@ -3399,29 +3396,15 @@ jQuery.macros = { * } ) * @desc Stop only an event from bubbling by using the stopPropagation method. * - * @example $("form").bind( "submit", function(event) { - * // do something after submit - * }, 1 ) - * @desc Executes the function only on the first submit event and removes it afterwards - * * @name bind * @type jQuery * @param String type An event type * @param Function fn A function to bind to the event on each of the set of matched elements - * @param Number amount An optional amount of times to execute the bound function * @cat Events */ - bind: function( type, fn, amount ) { + bind: function( type, fn ) { if ( fn.constructor == String ) fn = new Function("e", ( !fn.indexOf(".") ? "jQuery(this)" : "return " ) + fn); - if( amount > 0 ) { - var element = this, handler = fn, count = 0; - fn = function(e) { - if( ++count >= amount ) - jQuery(element).unbind(type, fn); - handler.apply(element, [e]); - }; - } jQuery.event.add( this, type, fn ); },