aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/event.js4
-rw-r--r--src/manipulation.js11
-rw-r--r--test/unit/event.js16
3 files changed, 26 insertions, 5 deletions
diff --git a/src/event.js b/src/event.js
index 6e65438ac..d91231e86 100644
--- a/src/event.js
+++ b/src/event.js
@@ -112,6 +112,10 @@ jQuery.event = {
if ( special.add ) {
special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
}
// Add the function to the element's handler list
diff --git a/src/manipulation.js b/src/manipulation.js
index a58e52b6a..4e7a31ed4 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -547,7 +547,7 @@ jQuery.extend({
},
cleanData: function( elems ) {
- var data, id, cache = jQuery.cache;
+ var data, id, cache = jQuery.cache, special = jQuery.event.special;
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
id = elem[ jQuery.expando ];
@@ -556,8 +556,13 @@ jQuery.extend({
data = cache[ id ];
if ( data.events ) {
- for ( var event in data.events ) {
- removeEvent( elem, event, data.handle );
+ for ( var type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ } else {
+ removeEvent( elem, type, data.handle );
+ }
}
}
diff --git a/test/unit/event.js b/test/unit/event.js
index 21167c7de..7d66c9ca2 100644
--- a/test/unit/event.js
+++ b/test/unit/event.js
@@ -72,7 +72,7 @@ test("bind(), multiple events at once and namespaces", function() {
});
test("bind(), namespace with special add", function() {
- expect(19);
+ expect(24);
var div = jQuery("<div/>").bind("test", function(e) {
ok( true, "Test event fired." );
@@ -97,7 +97,9 @@ test("bind(), namespace with special add", function() {
handler.apply( this, arguments );
};
},
- remove: function() {}
+ remove: function() {
+ ok(true, "Remove called.");
+ }
};
div.bind("test.a", {x: 1}, function(e) {
@@ -119,7 +121,17 @@ test("bind(), namespace with special add", function() {
// Should trigger 2
div.trigger("test.b");
+ // Should trigger 4
div.unbind("test");
+
+ div = jQuery("<div/>").bind("test", function(e) {
+ ok( true, "Test event fired." );
+ });
+
+ // Should trigger 2
+ div.appendTo("#main").remove();
+
+ delete jQuery.event.special.test;
});
test("bind(), no data", function() {