aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrandon Aaron <brandon.aaron@gmail.com>2009-03-20 03:10:07 +0000
committerBrandon Aaron <brandon.aaron@gmail.com>2009-03-20 03:10:07 +0000
commit30e760b63fd6d82f30833cd2864f245dd9594cd9 (patch)
tree21590a327ce56b7c841e0ca7e5cd0dc852a71d1c
parentdae96f552e7ec4ddef52f86c61de18320a7b63ed (diff)
downloadjquery-30e760b63fd6d82f30833cd2864f245dd9594cd9.tar.gz
jquery-30e760b63fd6d82f30833cd2864f245dd9594cd9.zip
fix for #4189, live/die now work with contexts other than just document
-rw-r--r--src/event.js4
-rw-r--r--test/unit/event.js20
2 files changed, 21 insertions, 3 deletions
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;