Skip to content
Permalink
Browse files

Make sure that elements that have been removed also have their specia…

…l events cleaned up. Fixes #6084.
  • Loading branch information
jeresig committed Feb 13, 2010
1 parent 6a82f2a commit da966573c3f3cb083c48cd3ead88e7542937d4df
Showing with 26 additions and 5 deletions.
  1. +4 −0 src/event.js
  2. +8 −3 src/manipulation.js
  3. +14 −2 test/unit/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
@@ -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 );
}
}
}

@@ -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() {

0 comments on commit da96657

Please sign in to comment.
You can’t perform that action at this time.