X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fevent%2Fevent.js;h=fb7f820ca7d859b00d0204c7eefad669b33740c9;hb=68d8e53d8751c095fcc148cb52aae472a6e60c26;hp=812d6f268357809a3bb80e7fa272405ff1661ea9;hpb=d2f9022a8ebbfadeb6a329714a607d2dc2882769;p=jquery.git diff --git a/src/event/event.js b/src/event/event.js index 812d6f2..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,21 +55,39 @@ 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) { + trigger: function(type, data, element) { // Clone the incoming data, if any data = jQuery.makeArray(data || []); @@ -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 ); @@ -313,9 +331,19 @@ jQuery.fn.extend({ * @before

Hello

* @result alert('hello') * + * @example $("p").click(function(event, a, b) { + * // when a normal click fires, a and b are undefined + * // for a trigger like below a refers too "foo" and b refers to "bar" + * }).trigger("click", ["foo", "bar"]); + * @desc Example of how to pass arbitrary to an event + * + * @before

Hello

+ * @result alert('hello') + * * @name trigger * @type jQuery * @param String type An event type to trigger. + * @param Array data (optional) Additional data to pass as arguments (after the event object) to the event handler * @cat Events */ trigger: function( type, data ) { @@ -419,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.