Fix #12203. .undelegate() should not remove direcly bound events.

This commit is contained in:
Dave Methvin 2012-08-07 20:49:34 -04:00
parent 37e8b44884
commit 1d8bf0a2b5
2 changed files with 11 additions and 5 deletions

View File

@ -973,7 +973,7 @@ jQuery.fn.extend({
},
undelegate: function( selector, types, fn ) {
// ( namespace ) or ( selector, types [, fn] )
return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
},
trigger: function( type, data ) {

View File

@ -2376,18 +2376,24 @@ test("stopPropagation() stops directly-bound events on delegated target", functi
});
test("undelegate all bound events", function(){
expect(1);
expect(2);
var count = 0;
var div = jQuery("#body");
var count = 0,
clicks = 0,
div = jQuery("#body");
div.delegate("div#nothiddendivchild", "click submit", function(){ count++; });
div.delegate( "div#nothiddendivchild", "click submit", function(){ count++; } );
div.bind( "click", function(){ clicks++; } );
div.undelegate();
jQuery("div#nothiddendivchild").trigger("click");
jQuery("div#nothiddendivchild").trigger("submit");
equal( count, 0, "Make sure no events were triggered." );
div.trigger("click");
equal( clicks, 2, "Make sure delegated and directly bound event occurred." );
div.unbind("click");
});
test("delegate with multiple events", function(){