X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;ds=sidebyside;f=src%2Fevent%2Fevent.js;h=2d9c53056e9765ae49fc4000a87535796f8419ee;hb=11b64c1149a0d49d105b50a2869d74cbe18613ed;hp=61bd4e8852e4266ef6cca82e29913c037cea2c66;hpb=e0aa10a664aabbc9ab900a07ea55cb892a7b8d3f;p=jquery.git diff --git a/src/event/event.js b/src/event/event.js index 61bd4e8..2d9c530 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -14,7 +14,7 @@ jQuery.event = { element = window; // if data is passed, bind to handler - if( data != undefined ) { + if( data != handler ) { // Create temporary function pointer to original handler var fn = handler; @@ -38,29 +38,29 @@ jQuery.event = { // Init the element's event structure if (!element.$events) element.$events = {}; - - // Get the current list of functions bound to this event - var handlers = element.$events[type]; - - // Init the event handler queue - if (!handlers) - handlers = element.$events[type] = {}; - - // Add the function to the element's handler list - handlers[handler.guid] = handler; - if (!element.$handle) { + if (!element.$handle) element.$handle = function() { jQuery.event.handle.apply(element, arguments); }; + // Get the current list of functions bound to this event + var handlers = element.$events[type]; + + // Init the event handler queue + if (!handlers) { + handlers = element.$events[type] = {}; + // And bind the global event handler to the element if (element.addEventListener) element.addEventListener(type, element.$handle, false); else if (element.attachEvent) - element.attachEvent("on" + type, element.$handle, false); + element.attachEvent("on" + type, element.$handle); } + // Add the function to the element's handler list + handlers[handler.guid] = handler; + // Remember the function in a global list (for triggering) if (!this.global[type]) this.global[type] = []; @@ -101,8 +101,8 @@ jQuery.event = { if (element.removeEventListener) element.removeEventListener(type, element.$handle, false); else if (element.detachEvent) - element.detachEvent("on" + type, element.$handle, false); - ret = element.$handle = null; + element.detachEvent("on" + type, element.$handle); + ret = null; delete events[type]; } } @@ -110,7 +110,7 @@ jQuery.event = { // Remove the expando if it's no longer used for ( ret in events ) break; if ( !ret ) - element.$events = null; + element.$handle = element.$events = null; } }, @@ -274,7 +274,7 @@ jQuery.fn.extend({ */ bind: function( type, data, fn ) { return this.each(function(){ - jQuery.event.add( this, type, fn || data, data ); + jQuery.event.add( this, type, fn || data, fn && data ); }); }, @@ -309,7 +309,7 @@ jQuery.fn.extend({ jQuery.event.add( this, type, function(event) { jQuery(this).unbind(event); return (fn || data).apply( this, arguments); - }, data); + }, fn && data); }); },