jquery core: closes #2652. val() supports option elements, also simplified the code.
[jquery.git] / src / event.js
index 2bdf9ab..8529d13 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * A number of helper functions used for managing events.
- * Many of the ideas behind this code orignated from
+ * Many of the ideas behind this code originated from
  * Dean Edwards' addEvent library.
  */
 jQuery.event = {
@@ -66,7 +66,7 @@ jQuery.event = {
                                // Check for a special event handler
                                // Only use addEventListener/attachEvent if the special
                                // events handler returns false
-                               if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
+                               if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem,data) === false ) {
                                        // Bind the global event handler to the element
                                        if (elem.addEventListener)
                                                elem.addEventListener(type, handle, false);
@@ -168,7 +168,10 @@ jQuery.event = {
                if ( !elem ) {
                        // Only trigger if we've ever bound an event for it
                        if ( this.global[type] )
-                               jQuery("*").add([window, document]).trigger(type, data);
+                               jQuery.each( jQuery.cache, function(){
+                                       if ( this.events && this.events[type] )
+                                               jQuery.event.trigger( type, data, this.handle.elem );
+                               });
 
                // Handle triggering a single element
                } else {
@@ -274,6 +277,8 @@ jQuery.event = {
                return val;
        },
 
+       props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" "),
+
        fix: function(event) {
                if ( event[expando] == true )
                        return event;
@@ -282,9 +287,11 @@ jQuery.event = {
                // and "clone" to set read-only properties
                var originalEvent = event;
                event = { originalEvent: originalEvent };
-               var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");
-               for ( var i=props.length; i; i-- )
-                       event[ props[i] ] = originalEvent[ props[i] ];
+
+               for ( var i = this.props.length, prop; i; ){
+                       prop = this.props[ --i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
 
                // Mark it as fixed
                event[expando] = true;
@@ -363,9 +370,9 @@ jQuery.event = {
                },
 
                mouseenter: {
-                       setup: function() {
+                       setup: function( data ) {
                                if ( jQuery.browser.msie ) return false;
-                               jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
+                               jQuery(this).bind("mouseover", data, jQuery.event.special.mouseenter.handler);
                                return true;
                        },
 
@@ -385,9 +392,9 @@ jQuery.event = {
                },
 
                mouseleave: {
-                       setup: function() {
+                       setup: function( data ) {
                                if ( jQuery.browser.msie ) return false;
-                               jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
+                               jQuery(this).bind("mouseout", data, jQuery.event.special.mouseleave.handler);
                                return true;
                        },
 
@@ -596,6 +603,9 @@ var withinElement = function(event, elem) {
 // Prevent memory leaks in IE
 // And prevent errors on refresh with events like mouseover in other browsers
 // Window isn't included so as not to unbind existing unload events
-jQuery(window).bind("unload", function() {
-       jQuery("*").add(document).unbind();
-});
+jQuery( window ).bind( 'unload', function(){ 
+       for ( var id in jQuery.cache )
+               // Skip the window
+               if ( id != 1 && jQuery.cache[ id ].handle )
+                       jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+});