Make sure that special.add actually copies over event namespaces and data. Fixes...
authorjeresig <jeresig@gmail.com>
Mon, 25 Jan 2010 22:01:07 +0000 (17:01 -0500)
committerjeresig <jeresig@gmail.com>
Mon, 25 Jan 2010 22:01:07 +0000 (17:01 -0500)
src/event.js
test/unit/event.js

index 8ec1d4f..58f7a31 100644 (file)
@@ -114,6 +114,8 @@ jQuery.event = {
                                var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); 
                                if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { 
                                        modifiedHandler.guid = modifiedHandler.guid || handler.guid; 
+                                       modifiedHandler.data = modifiedHandler.data || handler.data; 
+                                       modifiedHandler.type = modifiedHandler.type || handler.type; 
                                        handler = modifiedHandler; 
                                } 
                        } 
index 30ed09e..824707f 100644 (file)
@@ -71,6 +71,47 @@ test("bind(), multiple events at once and namespaces", function() {
        div.trigger("focusout.b");
 });
 
+test("bind(), namespace with special add", function() {
+       expect(9);
+
+       var div = jQuery("<div/>").bind("test", function(e) {
+               ok( true, "Test event fired." );
+       });
+
+       var i = 0;
+
+       jQuery.event.special.test = {
+               setup: function(){},
+               teardown: function(){},
+               add: function( handler, data, namespaces ) {
+                       return function(e) {
+                               e.xyz = ++i;
+                               handler.apply( this, arguments );
+                       };
+               },
+               remove: function() {}
+       };
+
+       div.bind("test.a", {x: 1}, function(e) {
+               ok( !!e.xyz, "Make sure that the data is getting passed through." );
+               equals( e.data.x, 1, "Make sure data is attached properly." );
+       });
+
+       div.bind("test.b", {x: 2}, function(e) {
+               ok( !!e.xyz, "Make sure that the data is getting passed through." );
+               equals( e.data.x, 2, "Make sure data is attached properly." );
+       });
+
+       // Should trigger 5
+       div.trigger("test");
+
+       // Should trigger 2
+       div.trigger("test.a");
+
+       // Should trigger 2
+       div.trigger("test.b");
+});
+
 test("bind(), no data", function() {
        expect(1);
        var handler = function(event) {