Skip to content

Commit

Permalink
Allow mapped types to be removed by a namespace-only type name.
Browse files Browse the repository at this point in the history
  • Loading branch information
dmethvin committed Nov 15, 2011
1 parent 6736dd7 commit ca8fc72
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
9 changes: 4 additions & 5 deletions src/event.js
Expand Up @@ -148,7 +148,7 @@ jQuery.event = {
global: {},

// Detach an event or set of events from an element
remove: function( elem, types, handler, selector ) {
remove: function( elem, types, handler, selector, mappedTypes ) {

var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
t, tns, type, origType, namespaces, origCount,
Expand All @@ -167,9 +167,8 @@ jQuery.event = {

// Unbind all events (on this namespace, if provided) for the element
if ( !type ) {
namespaces = namespaces? "." + namespaces : "";
for ( j in events ) {
jQuery.event.remove( elem, j + namespaces, handler, selector );
for ( type in events ) {
jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
}
continue;
}
Expand All @@ -184,7 +183,7 @@ jQuery.event = {
for ( j = 0; j < eventType.length; j++ ) {
handleObj = eventType[ j ];

if ( origType === handleObj.origType &&
if ( ( mappedTypes || origType === handleObj.origType ) &&
( !handler || handler.guid === handleObj.guid ) &&
( !namespaces || namespaces.test( handleObj.namespace ) ) &&
( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
Expand Down
13 changes: 11 additions & 2 deletions test/unit/event.js
Expand Up @@ -1132,7 +1132,7 @@ test("trigger(eventObject, [data], [fn])", function() {

$child.unbind();
$parent.unbind().remove();

// Ensure triggerHandler doesn't molest its event object (#xxx)
var event = jQuery.Event( "zowie" );
jQuery( document ).triggerHandler( event );
Expand Down Expand Up @@ -2508,20 +2508,29 @@ test("special bind/delegate name mapping", function() {
.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" );
}
};

// Ensure a special event isn't removed by its mapped type
jQuery( '<p>Gut Feeling</p>' )
.on( "click", jQuery.noop )
.on( "gutfeeling", jQuery.noop )
.off( "click" )
.trigger( "gutfeeling" )
.remove();

// Ensure special events are removed when only a namespace is provided
jQuery( '<p>Gut Feeling</p>' )
.on( "gutfeeling.Devo", jQuery.noop )
.off( ".Devo" )
.trigger( "gutfeeling" )
.remove();

delete jQuery.event.special.gutfeeling;
});

Expand Down

0 comments on commit ca8fc72

Please sign in to comment.