diff --git a/src/event.js b/src/event.js index 95718ad06..e5f6a453a 100644 --- a/src/event.js +++ b/src/event.js @@ -548,13 +548,13 @@ jQuery.fn.extend({ var proxy = jQuery.event.proxy( fn ); 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; }, 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; } }); diff --git a/test/unit/event.js b/test/unit/event.js index 9a7c7034a..d2411528c 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -489,7 +489,7 @@ test("toggle(Function, Function, ...)", function() { }); test(".live()/.die()", function() { - expect(49); + expect(52); var submit = 0, div = 0, livea = 0, liveb = 0; @@ -561,6 +561,24 @@ test(".live()/.die()", function() { jQuery("div").die("click"); 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 jQuery("#anchor2").live("click", function(){ return false; }); var hash = window.location.hash;