X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent%2Fevent.js;h=8aedabbc63c7c4dbcb7b371fe737896665dbd2c4;hb=fe1910d4d9f547774cb26f4770b303635333f8e6;hp=fb7f820ca7d859b00d0204c7eefad669b33740c9;hpb=34cb5b5812db50d921f7c7a0c398eb68167b3da3;p=jquery.git diff --git a/src/event/event.js b/src/event/event.js index fb7f820..8aedabb 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 element.$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] = null; + delete element.$events[type]; } - if (!k) element["on" + type] = null; + } + + // Remove the expando if it's no longer used + for ( ret in events ) break; + if ( !ret ) + element.$events = null; } }, @@ -210,7 +216,7 @@ jQuery.fn.extend({ * * In most cases, you can define your event handlers as anonymous functions * (see first example). In cases where that is not possible, you can pass additional - * data as the second paramter (and the handler function as the third), see + * data as the second parameter (and the handler function as the third), see * second example. * * @example $("p").bind("click", function(){ @@ -325,7 +331,14 @@ jQuery.fn.extend({ }, /** - * Trigger a type of event on every matched element. + * Trigger a type of event on every matched element. This will also cause + * the default action of the browser with the same name (if one exists) + * to be executed. For example, passing 'submit' to the trigger() + * function will also cause the browser to submit the form. This + * default action can be prevented by returning false from one of + * the functions bound to the event. + * + * You can also trigger custom events registered with bind. * * @example $("p").trigger("click") * @before

Hello

@@ -335,10 +348,13 @@ jQuery.fn.extend({ * // 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 + * @desc Example of how to pass arbitrary data to an event * - * @before

Hello

- * @result alert('hello') + * @example $("p").bind("myEvent",function(event,message1,message2) { + * alert(message1 + ' ' + message2); + * }); + * $("p").trigger("myEvent",["Hello","World"]); + * @result alert('Hello World') // One for each paragraph * * @name trigger * @type jQuery @@ -402,9 +418,9 @@ jQuery.fn.extend({ * (a common error in using a mouseout event handler). * * @example $("p").hover(function(){ - * $(this).addClass("over"); + * $(this).addClass("hover"); * },function(){ - * $(this).addClass("out"); + * $(this).removeClass("hover"); * }); * * @name hover @@ -441,9 +457,9 @@ jQuery.fn.extend({ * the response times of your web applications. * * In a nutshell, this is a solid replacement for using window.onload, - * and attaching a function to that. By using this method, your bound Function + * and attaching a function to that. By using this method, your bound function * will be called the instant the DOM is ready to be read and manipulated, - * which is exactly what 99.99% of all Javascript code needs to run. + * which is when what 99.99% of all JavaScript code needs to run. * * 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 @@ -460,7 +476,7 @@ jQuery.fn.extend({ * @example jQuery(function($) { * // Your code using failsafe $ alias here... * }); - * @desc Uses both the shortcut for $(document).ready() and the argument + * @desc Uses both the [[Core#.24.28_fn_.29|shortcut]] for $(document).ready() and the argument * to write failsafe jQuery code using the $ alias, without relying on the * global alias. * @@ -550,13 +566,15 @@ new function(){ /** * Trigger the submit event of each matched element. This causes all of the functions - * that have been bound to thet submit event to be executed. + * that have been bound to that submit event to be executed, and calls the browser's + * default submit action on the matching element(s). This default action can be prevented + * by returning false from one of the functions bound to the submit event. * * Note: This does not execute the submit method of the form element! If you need to * submit the form via code, you have to use the DOM method, eg. $("form")[0].submit(); * * @example $("form").submit(); - * @desc Triggers all submit events registered for forms, but does not submit the form + * @desc Triggers all submit events registered to the matched form(s), and submits them. * * @name submit * @type jQuery @@ -659,7 +677,9 @@ new function(){ /** * Trigger the blur event of each matched element. This causes all of the functions - * that have been bound to thet blur event to be executed. + * that have been bound to that blur event to be executed, and calls the browser's + * default blur action on the matching element(s). This default action can be prevented + * by returning false from one of the functions bound to the blur event. * * Note: This does not execute the blur method of the underlying elements! If you need to * blur an element via code, you have to use the DOM method, eg. $("#myinput")[0].blur(); @@ -701,7 +721,9 @@ new function(){ /** * Trigger the select event of each matched element. This causes all of the functions - * that have been bound to thet select event to be executed. + * that have been bound to that select event to be executed, and calls the browser's + * default select action on the matching element(s). This default action can be prevented + * by returning false from one of the functions bound to the select event. * * @example $("p").select(); * @before

Hello