Further optimize the empty/remove/cleanData logic.
[jquery.git] / src / event.js
index 53ef72c..b4650ae 100644 (file)
@@ -221,11 +221,7 @@ jQuery.event = {
 
                                                if ( !ret ) {
                                                        if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-                                                               if ( elem.removeEventListener ) {
-                                                                       elem.removeEventListener( type, elemData.handle, false );
-                                                               } else if ( elem.detachEvent ) {
-                                                                       elem.detachEvent( "on" + type, elemData.handle );
-                                                               }
+                                                               removeEvent( elem, type, elemData.handle );
                                                        }
 
                                                        ret = null;
@@ -333,9 +329,12 @@ jQuery.event = {
 
                } else if ( !event.isDefaultPrevented() ) {
                        var target = event.target, old,
-                               isClick = jQuery.nodeName(target, "a") && type === "click";
+                               isClick = jQuery.nodeName(target, "a") && type === "click",
+                               special = jQuery.event.special[ type ] || {};
+
+                       if ( (!special._default || special._default.call( elem, event ) === false) && 
+                               !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
 
-                       if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
                                try {
                                        if ( target[ type ] ) {
                                                // Make sure that we don't accidentally re-trigger the onFOO events
@@ -526,6 +525,14 @@ jQuery.event = {
        }
 };
 
+var removeEvent = document.removeEventListener ?
+       function( elem, type, handle ) {
+               elem.removeEventListener( type, handle, false );
+       } : 
+       function( elem, type, handle ) {
+               elem.detachEvent( "on" + type, handle );
+       };
+
 jQuery.Event = function( src ) {
        // Allow instantiation without the 'new' keyword
        if ( !this.preventDefault ) {