fix for #4189, live/die now work with contexts other than just document
This commit is contained in:
parent
dae96f552e
commit
30e760b63f
2 changed files with 21 additions and 3 deletions
|
@ -548,13 +548,13 @@ jQuery.fn.extend({
|
||||||
var proxy = jQuery.event.proxy( fn );
|
var proxy = jQuery.event.proxy( fn );
|
||||||
proxy.guid += this.selector + type;
|
proxy.guid += this.selector + type;
|
||||||
|
|
||||||
jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );
|
jQuery( this.context ).bind( liveConvert(type, this.selector), this.selector, proxy );
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
die: function( type, fn ){
|
die: function( type, fn ){
|
||||||
jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
|
jQuery( this.context ).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -489,7 +489,7 @@ test("toggle(Function, Function, ...)", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test(".live()/.die()", function() {
|
test(".live()/.die()", function() {
|
||||||
expect(49);
|
expect(52);
|
||||||
|
|
||||||
var submit = 0, div = 0, livea = 0, liveb = 0;
|
var submit = 0, div = 0, livea = 0, liveb = 0;
|
||||||
|
|
||||||
|
@ -561,6 +561,24 @@ test(".live()/.die()", function() {
|
||||||
jQuery("div").die("click");
|
jQuery("div").die("click");
|
||||||
jQuery("div").die("submit");
|
jQuery("div").die("submit");
|
||||||
|
|
||||||
|
// Test binding with a different context
|
||||||
|
var clicked = 0, container = jQuery('#main')[0];
|
||||||
|
jQuery("#foo", container).live("click", function(e){ clicked++; });
|
||||||
|
jQuery("div").trigger('click');
|
||||||
|
jQuery("#foo").trigger('click');
|
||||||
|
jQuery("#main").trigger('click');
|
||||||
|
jQuery("body").trigger('click');
|
||||||
|
equals( clicked, 2, "live with a context" );
|
||||||
|
|
||||||
|
// Make sure the event is actually stored on the context
|
||||||
|
ok( jQuery.data(container, "events").live, "live with a context" );
|
||||||
|
|
||||||
|
// Test unbinding with a different context
|
||||||
|
jQuery("#foo", container).die("click");
|
||||||
|
jQuery("#foo").trigger('click');
|
||||||
|
equals( clicked, 2, "die with a context");
|
||||||
|
|
||||||
|
|
||||||
// Verify that return false prevents default action
|
// Verify that return false prevents default action
|
||||||
jQuery("#anchor2").live("click", function(){ return false; });
|
jQuery("#anchor2").live("click", function(){ return false; });
|
||||||
var hash = window.location.hash;
|
var hash = window.location.hash;
|
||||||
|
|
Loading…
Reference in a new issue