diff --git a/src/renderers/dom/client/eventPlugins/BeforeInputEventPlugin.js b/src/renderers/dom/client/eventPlugins/BeforeInputEventPlugin.js index 0816dc385bf45..fdcf0bf8deb1a 100644 --- a/src/renderers/dom/client/eventPlugins/BeforeInputEventPlugin.js +++ b/src/renderers/dom/client/eventPlugins/BeforeInputEventPlugin.js @@ -237,7 +237,8 @@ function extractCompositionEvent( topLevelType, topLevelTarget, topLevelTargetID, - nativeEvent + nativeEvent, + nativeEventTarget ) { var eventType; var fallbackData; @@ -271,7 +272,8 @@ function extractCompositionEvent( var event = SyntheticCompositionEvent.getPooled( eventType, topLevelTargetID, - nativeEvent + nativeEvent, + nativeEventTarget ); if (fallbackData) { @@ -411,7 +413,8 @@ function extractBeforeInputEvent( topLevelType, topLevelTarget, topLevelTargetID, - nativeEvent + nativeEvent, + nativeEventTarget ) { var chars; @@ -430,7 +433,8 @@ function extractBeforeInputEvent( var event = SyntheticInputEvent.getPooled( eventTypes.beforeInput, topLevelTargetID, - nativeEvent + nativeEvent, + nativeEventTarget ); event.data = chars; @@ -472,20 +476,23 @@ var BeforeInputEventPlugin = { topLevelType, topLevelTarget, topLevelTargetID, - nativeEvent + nativeEvent, + nativeEventTarget ) { return [ extractCompositionEvent( topLevelType, topLevelTarget, topLevelTargetID, - nativeEvent + nativeEvent, + nativeEventTarget ), extractBeforeInputEvent( topLevelType, topLevelTarget, topLevelTargetID, - nativeEvent + nativeEvent, + nativeEventTarget ), ]; }, diff --git a/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js b/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js index 06fe96f026800..65a763f0b6ae3 100644 --- a/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js +++ b/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js @@ -74,7 +74,8 @@ function manualDispatchChangeEvent(nativeEvent) { var event = SyntheticEvent.getPooled( eventTypes.change, activeElementID, - nativeEvent + nativeEvent, + nativeEvent.target ); EventPropagators.accumulateTwoPhaseDispatches(event); @@ -330,7 +331,8 @@ var ChangeEventPlugin = { topLevelType, topLevelTarget, topLevelTargetID, - nativeEvent) { + nativeEvent, + nativeEventTarget) { var getTargetIDFunc, handleEventFunc; if (shouldUseChangeEvent(topLevelTarget)) { @@ -360,7 +362,8 @@ var ChangeEventPlugin = { var event = SyntheticEvent.getPooled( eventTypes.change, targetID, - nativeEvent + nativeEvent, + nativeEventTarget ); event.type = 'change'; EventPropagators.accumulateTwoPhaseDispatches(event); diff --git a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js index dc38ba0d1c755..582834c270464 100644 --- a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js +++ b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js @@ -16,12 +16,14 @@ var emptyFunction = require('emptyFunction'); var mocks = require('mocks'); describe('ReactDOMInput', function() { + var EventConstants; var React; var ReactLink; var ReactTestUtils; beforeEach(function() { require('mock-modules').dumpCache(); + EventConstants = require('EventConstants'); React = require('React'); ReactLink = require('ReactLink'); ReactTestUtils = require('ReactTestUtils'); @@ -134,6 +136,30 @@ describe('ReactDOMInput', function() { expect(node.value).toBe('0'); }); + it('should have the correct target value', function() { + var handled = false; + var handler = function(event) { + expect(event.target.nodeName).toBe('INPUT'); + handled = true; + }; + var stub = ; + var container = document.createElement('div'); + var node = React.render(stub, container); + + node.value = 'giraffe'; + + var fakeNativeEvent = new function() {}; + fakeNativeEvent.target = node; + fakeNativeEvent.path = [node, container]; + ReactTestUtils.simulateNativeEventOnNode( + EventConstants.topLevelTypes.topInput, + node, + fakeNativeEvent + ); + + expect(handled).toBe(true); + }); + it('should not set a value for submit buttons unnecessarily', function() { var stub = ; stub = ReactTestUtils.renderIntoDocument(stub);