X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fevent%2Fevent.js;h=fb7f820ca7d859b00d0204c7eefad669b33740c9;hb=68d8e53d8751c095fcc148cb52aae472a6e60c26;hp=81c193980bc16d7a8bc98b5a041e0dd285d0cac8;hpb=43f235f4257359dfcf9270cf31c56aa547d01fd3;p=jquery.git diff --git a/src/event/event.js b/src/event/event.js index 81c1939..fb7f820 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -22,16 +22,16 @@ jQuery.event = { handler.guid = this.guid++; // Init the element's event structure - if (!element.events) - element.events = {}; + if (!element.$events) + element.$events = {}; // Get the current list of functions bound to this event - var handlers = element.events[type]; + var handlers = element.$events[type]; // If it hasn't been initialized yet if (!handlers) { // Init the event handler queue - handlers = element.events[type] = {}; + handlers = element.$events[type] = {}; // Remember an existing handler, if it's already there if (element["on" + type]) @@ -55,18 +55,36 @@ jQuery.event = { // Detach an event or set of events from an element remove: function(element, type, handler) { - if (element.events) - if ( type && type.type ) - delete element.events[ type.type ][ type.handler.guid ]; - else if (type && element.events[type]) + if (element.$events) { + var i,j,k; + if ( type && type.type ) { // type is actually an event object here + handler = type.handler; + type = type.type; + } + + if (type && element.$events[type]) + // remove the given handler for the given type if ( handler ) - delete element.events[type][handler.guid]; + delete element.$events[type][handler.guid]; + + // remove all handlers for the given type else - for ( var i in element.events[type] ) - delete element.events[type][i]; + for ( i in element.$events[type] ) + delete element.$events[type][i]; + + // remove all handlers else - for ( var j in element.events ) + for ( j in element.$events ) this.remove( element, j ); + + // remove event handler if no more handlers exist + for ( k in element.$events[type] ) + if (k) { + k = true; + break; + } + if (!k) element["on" + type] = null; + } }, trigger: function(type, data, element) { @@ -111,7 +129,7 @@ jQuery.event = { // returned undefined or false var returnValue; - var c = this.events[event.type]; + var c = this.$events[event.type]; var args = [].slice.call( arguments, 1 ); args.unshift( event ); @@ -429,7 +447,7 @@ jQuery.fn.extend({ * * There is one argument passed to the ready event handler: A reference to * the jQuery function. You can name that argument whatever you like, and - * can therefore stick with the $ alias without risc of naming collisions. + * can therefore stick with the $ alias without risk of naming collisions. * * Please ensure you have no code in your <body> onload event handler, * otherwise $(document).ready() may not fire.