X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent%2Fevent.js;h=fb7f820ca7d859b00d0204c7eefad669b33740c9;hb=34cb5b5812db50d921f7c7a0c398eb68167b3da3;hp=e7f920f9b885c207a1cf2d16e16178da56cc1508;hpb=b15ae79a389299cac19f59ed14efafc3e9d8ef0d;p=jquery.git diff --git a/src/event/event.js b/src/event/event.js index e7f920f..fb7f820 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -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]; + + // remove all handlers for the given type else - for ( var i in element.$events[type] ) + 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) {