X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent%2Fevent.js;h=ac6948046f9c17ac56774badb143e386afc1655c;hb=e0c7e6aec4cf55854217d5c0b2c7069ce84a3d12;hp=2ceaa9375769f85a47a97ee4675c22faa21ccd67;hpb=79f9678bf51285bc7b00470cf130abe0218b6cbb;p=jquery.git diff --git a/src/event/event.js b/src/event/event.js index 2ceaa93..ac69480 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -82,18 +82,23 @@ jQuery.event = { // Handle triggering a single element } else if ( element["on" + type] ) { - // Pass along a fake event - data.unshift( this.fix({ type: type, target: element }) ); - - // Trigger the event - element["on" + type].apply( element, data ); + if ( element[ type ] && element[ type ].constructor == Function ) + element[ type ](); + else { + // Pass along a fake event + data.unshift( this.fix({ type: type, target: element }) ); + + // Trigger the event + element["on" + type].apply( element, data ); + } } }, handle: function(event) { if ( typeof jQuery == "undefined" ) return false; - event = jQuery.event.fix( event || window.event || {} ); // Empty object is for triggered events with no data + // Empty object is for triggered events with no data + event = jQuery.event.fix( event || window.event || {} ); // returned undefined or false var returnValue; @@ -135,15 +140,17 @@ jQuery.event = { } // check if target is a textnode (safari) - if (event.target.nodeType == 3) { - // store a copy of the original event object and clone because target is read only + if (jQuery.browser.safari && event.target.nodeType == 3) { + // store a copy of the original event object + // and clone because target is read only var originalEvent = event; event = jQuery.extend({}, originalEvent); // get parentnode from textnode event.target = originalEvent.target.parentNode; - // add preventDefault and stopPropagation since they will not work on the clone + // add preventDefault and stopPropagation since + // they will not work on the clone event.preventDefault = function() { return originalEvent.preventDefault(); }; @@ -153,17 +160,15 @@ jQuery.event = { } // fix preventDefault and stopPropagation - if (!event.preventDefault) { + if (!event.preventDefault) event.preventDefault = function() { this.returnValue = false; }; - } - if (!event.stopPropagation) { + if (!event.stopPropagation) event.stopPropagation = function() { this.cancelBubble = true; }; - } return event; } @@ -1031,36 +1036,17 @@ new function(){ jQuery.fn[o] = function(f){ return f ? this.bind(o, f) : this.trigger(o); }; - - // Handle event unbinding - // TODO remove - jQuery.fn["un"+o] = function(f){ return this.unbind(o, f); }; - - // Finally, handle events that only fire once - // TODO remove - jQuery.fn["one"+o] = function(f){ - // save cloned reference to this - var element = jQuery(this); - var handler = function() { - // unbind itself when executed - element.unbind(o, handler); - element = null; - // apply original handler with the same arguments - return f.apply(this, arguments); - }; - return this.bind(o, handler); - }; }; // If Mozilla is used - if ( jQuery.browser.mozilla || jQuery.browser.opera ) { + if ( jQuery.browser.mozilla || jQuery.browser.opera ) // Use the handy event callback document.addEventListener( "DOMContentLoaded", jQuery.ready, false ); // If IE is used, use the excellent hack by Matthias Miller // http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited - } else if ( jQuery.browser.msie ) { + else if ( jQuery.browser.msie ) { // Only works if you document.write() it document.write("0) do if (type != 'unload') event.remove(els[i-1], type); while (--i); - } -}); +if (jQuery.browser.msie) + jQuery(window).bind("unload", function() { + var global = jQuery.event.global; + for ( var type in global ) { + var els = global[type], i = els.length; + if ( i && type != 'unload' ) + do + jQuery.event.remove(els[i-1], type); + while (--i); + } + }); \ No newline at end of file