Don't remove test directory on clean
[jquery.git] / src / event.js
index d4a899b..a380130 100644 (file)
@@ -8,6 +8,9 @@ jQuery.event = {
        // Bind an event to an element
        // Original by Dean Edwards
        add: function(element, type, handler, data) {
+               if ( element.nodeType == 3 || element.nodeType == 8 )
+                       return;
+
                // For whatever reason, IE has trouble passing the window object
                // around, causing it to be cloned in the process
                if ( jQuery.browser.msie && element.setInterval != undefined )
@@ -83,6 +86,10 @@ jQuery.event = {
 
        // Detach an event or set of events from an element
        remove: function(element, type, handler) {
+               // don't do events on text and comment nodes
+               if ( element.nodeType == 3 || element.nodeType == 8 )
+                       return;
+
                var events = jQuery.data(element, "events"), ret, index;
 
                // Namespaced event handlers
@@ -147,6 +154,10 @@ jQuery.event = {
 
                // Handle triggering a single element
                } else {
+                       // don't do events on text and comment nodes
+                       if ( element.nodeType == 3 || element.nodeType == 8 )
+                               return;
+
                        var val, ret, fn = jQuery.isFunction( element[ type ] || null ),
                                // Check to see if we need to provide a fake event, or not
                                event = !data[0] || !data[0].preventDefault;
@@ -171,13 +182,21 @@ jQuery.event = {
                                data.shift();
 
                        // Handle triggering of extra function
-                       if ( extra && extra.apply( element, data ) === false )
-                               val = false;
+                       if ( extra ) {
+                               // call the extra function and tack the current return value on the end for possible inspection
+                               var ret = extra.apply( element, data.concat( val ) );
+                               // if anything is returned, give it precedence and have it overwrite the previous value
+                               if (ret !== undefined)
+                                       val = ret;
+                       }
 
                        // Trigger the native events (except for clicks on links)
                        if ( fn && donative !== false && val !== false && !(jQuery.nodeName(element, 'a') && type == "click") ) {
                                this.triggered = true;
-                               element[ type ]();
+                               try {
+                                       element[ type ]();
+                               // prevent IE from throwing an error for some hidden elements
+                               } catch (e) {}
                        }
 
                        this.triggered = false;
@@ -268,7 +287,7 @@ jQuery.event = {
                if ( event.pageX == null && event.clientX != null ) {
                        var doc = document.documentElement, body = document.body;
                        event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
-                       event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc.clientLeft || 0);
+                       event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
                }
                        
                // Add which for key events
@@ -432,7 +451,7 @@ function bindReady(){
        
        // If Safari or IE is used
        // Continually check to see if the document is ready
-       if  (jQuery.browser.msie || jQuery.browser.safari ) (function(){
+       if (jQuery.browser.msie || jQuery.browser.safari ) (function(){
                try {
                        // If IE is used, use the trick by Diego Perini
                        // http://javascript.nwbox.com/IEContentLoaded/