From 4e5b46f7f624b119633390385560e09ab3d38fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Zaefferer?= Date: Fri, 27 Oct 2006 08:10:00 +0000 Subject: [PATCH] Modified onexxx handlers to unbind themselve when executed; Reintroduced event fixes (and added some more comments) --- src/event/event.js | 23 +++++++++-------------- src/jquery/jquery.js | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/event/event.js b/src/event/event.js index a60c4616a..7a61773da 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 9561ea9de..287cd6413 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; }