Make sure that the teardown is called after all the handlers of a type are removed...
authorJohn Resig <jeresig@gmail.com>
Thu, 11 Feb 2010 06:42:51 +0000 (01:42 -0500)
committerJohn Resig <jeresig@gmail.com>
Thu, 11 Feb 2010 06:42:51 +0000 (01:42 -0500)
src/event.js
test/unit/event.js

index 2e510ea..e15a2ea 100644 (file)
@@ -221,7 +221,7 @@ jQuery.event = {
                        }
 
                        // remove generic event handler if no more handlers exist
-                       if ( jQuery.isEmptyObject( events[ type ] ) ) {
+                       if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
                                if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
                                        removeEvent( elem, type, elemData.handle );
                                }
index e85c4bd..33329c3 100644 (file)
@@ -72,7 +72,7 @@ test("bind(), multiple events at once and namespaces", function() {
 });
 
 test("bind(), namespace with special add", function() {
-       expect(18);
+       expect(19);
 
        var div = jQuery("<div/>").bind("test", function(e) {
                ok( true, "Test event fired." );
@@ -87,7 +87,9 @@ test("bind(), namespace with special add", function() {
                        equals( e.target, div[0], "And that the target is correct." );
                },
                setup: function(){},
-               teardown: function(){},
+               teardown: function(){
+                       ok(true, "Teardown called.");
+               },
                add: function( handleObj ) {
                        var handler = handleObj.handler;
                        handleObj.handler = function(e) {
@@ -116,6 +118,8 @@ test("bind(), namespace with special add", function() {
 
        // Should trigger 2
        div.trigger("test.b");
+
+       div.unbind("test");
 });
 
 test("bind(), no data", function() {