X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent%2Fevent.js;h=e276ab6dac0ec925ea5c85e15fc4777a3d0eaf2b;hb=6b729ff7984d9d4d09dff042a3896022dae3783d;hp=4347ae57a26859a46adbc10cf37951f794237fff;hpb=92417f694a5c66cda477bf33e1c2d3ce0765e05f;p=jquery.git diff --git a/src/event/event.js b/src/event/event.js index 4347ae5..e276ab6 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -55,35 +55,41 @@ jQuery.event = { // Detach an event or set of events from an element remove: function(element, type, handler) { - if (element.$events) { - var i,j,k; - if ( type && type.type ) { // type is actually an event object here + var events = element.$events, ret; + + if ( events ) { + // type is actually an event object here + if ( type && type.type ) { handler = type.handler; - type = type.type; + type = type.type; } - if (type && element.$events[type]) + if ( !type ) { + for ( type in events ) + this.remove( element, type ); + + } else if ( events[type] ) { // remove the given handler for the given type if ( handler ) - delete element.$events[type][handler.guid]; - + delete events[type][handler.guid]; + // remove all handlers for the given type else - for ( i in element.$events[type] ) - delete element.$events[type][i]; - - // remove all handlers - else - 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; + for ( handler in events[type] ) + delete events[type][handler]; + + // remove generic event handler if no more handlers exist + for ( ret in events[type] ) break; + if ( !ret ) { + ret = element["on" + type] = undefined; + delete events[type]; } - if (!k) element["on" + type] = null; + } + + // Remove the expando if it's no longer used + for ( ret in events ) break; + if ( !ret ) + delete element.$events; } },