diff --git a/src/event/event.js b/src/event/event.js index a60c4616..7a61773d 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -1592,20 +1592,15 @@ new function(){ // Finally, handle events that only fire once jQuery.fn["one"+o] = function(f){ - // 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]); - }); - }); + // save cloned reference to this + var element = jQuery(this); + var handler = function() { + // unbind itself when executed + element.unbind(o, handler); + // apply original handler with the same arguments + f.apply(this, arguments); + }; + return this.bind(o, handler); }; }; diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 9561ea9d..287cd641 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -2295,16 +2295,25 @@ jQuery.extend({ }, fix: function(event) { - if ( event ) { + // check IE + if(jQuery.browser.msie) { + // get real event from window.event + event = window.event; event.preventDefault = function() { this.returnValue = false; }; - event.stopPropagation = function() { this.cancelBubble = true; }; + // fix target property + event.target = event.srcElement; + // check safari and if target is a textnode + } else if(jQuery.browser.safari && event.target.nodeType == 3) { + // target is readonly, clone the event object + event = jQuery.extend({}, event); + // get parentnode from textnode + event.target = event.target.parentNode; } - return event; }