Added support for map of events in live, die, delegate and undelegate. Fixes #6282.
authorRobert Katic <robert.katic@gmail.com>
Sun, 14 Mar 2010 11:34:32 +0000 (12:34 +0100)
committerjeresig <jeresig@gmail.com>
Thu, 23 Sep 2010 16:07:42 +0000 (12:07 -0400)
src/event.js
test/unit/event.js

index 264ac5b..e667ddb 100644 (file)
@@ -944,6 +944,14 @@ jQuery.each(["live", "die"], function( i, name ) {
                var type, i = 0, match, namespaces, preType,
                        selector = origSelector || this.selector,
                        context = origSelector ? this : jQuery( this.context );
+               
+               if ( typeof types === "object" && !types.preventDefault ) {
+                       for ( var key in types ) {
+                               context[ name ]( key, data, types[key], selector );
+                       }
+                       
+                       return this;
+               }
 
                if ( jQuery.isFunction( data ) ) {
                        fn = data;
index 9e1ac89..a133a10 100644 (file)
@@ -206,6 +206,45 @@ test("bind/one/unbind(Object)", function(){
        equals( mouseoverCounter, 4, "bind(Object)" );
 });
 
+test("live/die(Object), delegate/undelegate(String, Object)", function() {
+       expect(6);
+       
+       var clickCounter = 0, mouseoverCounter = 0,
+               $p = jQuery("#firstp"), $a = $p.find("a");
+       
+       var events = {
+               click: function( event ) {
+                       clickCounter += ( event.data || 1 );
+               },
+               mouseover: function( event ) {
+                       mouseoverCounter += ( event.data || 1 );
+               }
+       };
+       
+       function trigger() {
+               $a.trigger("click").trigger("mouseover");
+       }
+       
+       $a.live( events );
+       $p.delegate( "a", events, 2 );
+       
+       trigger();
+       equals( clickCounter, 3, "live/delegate(Object)" );
+       equals( mouseoverCounter, 3, "live/delegate(Object)" );
+       
+       $p.undelegate( "a", events );
+       
+       trigger();
+       equals( clickCounter, 4, "undelegate(Object)" );
+       equals( mouseoverCounter, 4, "undelegate(Object)" );
+       
+       $a.die( events );
+       
+       trigger();
+       equals( clickCounter, 4, "die(Object)" );
+       equals( mouseoverCounter, 4, "die(Object)" );
+});
+
 test("bind(), iframes", function() {
        // events don't work with iframes, see #939 - this test fails in IE because of contentDocument
        var doc = jQuery("#loadediframe").contents();