origCount = eventType.length;
namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
- // Only need to loop for special events or selective removal
- if ( handler || namespaces || selector || special.remove || origType !== type ) {
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( origType === handleObj.origType &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- eventType.splice( j--, 1 );
-
- if ( handleObj.selector ) {
- eventType.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
+ // Remove matching events
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( origType === handleObj.origType &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ eventType.splice( j--, 1 );
+
+ if ( handleObj.selector ) {
+ eventType.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
}
}
- } else {
- // Removing all events
- eventType.length = 0;
}
// Remove generic event handler if we removed something and no more handlers exist
});
test("special bind/delegate name mapping", function() {
- expect( 7 );
+ expect( 6 );
jQuery.event.special.slap = {
bindType: "click",
delegateType: "swing",
handle: function( event ) {
- equal( event.handleObj.origType, "slap", "event type is correct for " + event.type );
- equal( event.target.id, "mammy", "slapped your mammy" );
+ equal( event.handleObj.origType, "slap", "slapped your mammy, " + event.type );
}
};
var comeback = function( event ) {
- ok( true, "event " + event.type + " triggered" );
+ ok( true, "event " + event.type + " triggered" );
};
jQuery( '<div><button id="mammy">Are We Not Men?</button></div>' )
.off( "click" )
.trigger( "swing" ) // delegateType-slap and swing
.end()
- .off( "slap swing" )
- .find( "button " ) // everything should be gone
+ .off( "slap swing", "button" )
+ .find( "button" ) // everything should be gone
.trigger( "slap" )
.trigger( "click" )
.trigger( "swing" )
- .end();
+ .end()
+ .remove();
+ delete jQuery.event.special.slap;
+
+ // Ensure a special event isn't removed by its mapped type
+ jQuery.event.special.gutfeeling = {
+ bindType: "click",
+ delegateType: "click",
+ handle: function( event ) {
+ equal( event.handleObj.origType, "gutfeeling", "got a gutfeeling" );
+ }
+ };
+ jQuery( '<p>Gut Feeling</p>' )
+ .on( "click", jQuery.noop )
+ .on( "gutfeeling", jQuery.noop )
+ .off( "click" )
+ .trigger( "gutfeeling" )
+ .remove();
+ delete jQuery.event.special.gutfeeling;
});
test(".on and .off, selective mixed removal (#10705)", function() {