From bebd8bc01e63dcb053412f8b247e4fa611867c55 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Tue, 12 Apr 2011 19:29:09 -0400 Subject: [PATCH] Followup to #8753. Modify new Event constructor signature to jQuery.event(type, props), which can be exploited by jQuery.event.trigger as well. --- src/event.js | 24 +++++++++--------------- test/unit/event.js | 4 ++-- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/event.js b/src/event.js index f005f7285..dd48e7f77 100644 --- a/src/event.js +++ b/src/event.js @@ -304,9 +304,9 @@ jQuery.event = { // jQuery.Event object event[ jQuery.expando ] ? event : // Object literal - jQuery.extend( new jQuery.Event(type), event ) : + new jQuery.Event( type, event ) : // Just the event type (string) - new jQuery.Event(type); + new jQuery.Event( type ); event.type = type; event.namespace = namespaces.join("."); @@ -563,26 +563,15 @@ jQuery.removeEvent = document.removeEventListener ? } }; -jQuery.Event = function( src ) { +jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !this.preventDefault ) { - return new jQuery.Event( src ); + return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; - - // Push explicitly provided properties onto the event object - for ( var prop in src ) { - // Ensure we don't clobber jQuery.Event prototype - // with own properties. - if ( hasOwn.call( src, prop ) ) { - this[ prop ] = src[ prop ]; - } - } - - // Always ensure a type has been explicitly set this.type = src.type; // Events bubbling up the document may have been marked as prevented @@ -595,6 +584,11 @@ jQuery.Event = function( src ) { this.type = src; } + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = jQuery.now(); diff --git a/test/unit/event.js b/test/unit/event.js index 491396f93..d4e3994e5 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -978,11 +978,11 @@ test("trigger(eventObject, [data], [fn])", function() { $parent.unbind().remove(); }); -test("jQuery.Event({ /* props */ })", function() { +test("jQuery.Event( type, props )", function() { expect(4); - var event = jQuery.Event({ type: "keydown", keyCode: 64 }), + var event = jQuery.Event( "keydown", { keyCode: 64 }), handler = function( event ) { ok( "keyCode" in event, "Special property 'keyCode' exists" ); equal( event.keyCode, 64, "event.keyCode has explicit value '64'" );