Prevent IE from firing live/delegate events on disabled elements. (#6911)
[jquery.git] / src / event.js
index d830c4d..cf3ec2a 100644 (file)
@@ -32,6 +32,9 @@ jQuery.event = {
 
                if ( handler === false ) {
                        handler = returnFalse;
+               } else if ( !handler ) {
+                 // Fixes bug #7229. Fix recommended by jdalton
+                 return;
                }
 
                var handleObjIn, handleObj;
@@ -792,6 +795,8 @@ if ( !jQuery.support.changeBubbles ) {
                filters: {
                        focusout: testChange, 
 
+                       beforedeactivate: testChange,
+
                        click: function( e ) {
                                var elem = e.target, type = elem.type;
 
@@ -1063,6 +1068,11 @@ function liveHandler( event ) {
        if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
                return;
        }
+       
+       // IE will still dispatch events on disabled elements, so halt it (#6911)
+       if( event.target.disabled ) {
+               return;
+       }
 
        if ( event.namespace ) {
                namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
@@ -1127,6 +1137,9 @@ function liveHandler( event ) {
                        if ( ret === false ) {
                                stop = false;
                        }
+                       if ( event.isImmediatePropagationStopped() ) {
+                               break;
+                       }
                }
        }