Make sure that special.add actually copies over event namespaces and data. Fixes #5779 and #5834.

This commit is contained in:
jeresig 2010-01-25 17:01:07 -05:00
parent 0474917c9d
commit 390186b902
2 changed files with 43 additions and 0 deletions

View file

@ -114,6 +114,8 @@ jQuery.event = {
var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers );
if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) {
modifiedHandler.guid = modifiedHandler.guid || handler.guid; modifiedHandler.guid = modifiedHandler.guid || handler.guid;
modifiedHandler.data = modifiedHandler.data || handler.data;
modifiedHandler.type = modifiedHandler.type || handler.type;
handler = modifiedHandler; handler = modifiedHandler;
} }
} }

View file

@ -71,6 +71,47 @@ test("bind(), multiple events at once and namespaces", function() {
div.trigger("focusout.b"); 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() { test("bind(), no data", function() {
expect(1); expect(1);
var handler = function(event) { var handler = function(event) {