diff --git a/packages/react-events/src/Press.js b/packages/react-events/src/Press.js index d762c8ac41..c6d00176a9 100644 --- a/packages/react-events/src/Press.js +++ b/packages/react-events/src/Press.js @@ -871,6 +871,7 @@ const PressResponder = { return; } isKeyboardEvent = true; + removeRootEventTypes(context, state); } // Determine whether to call preventDefault on subsequent native events. @@ -940,7 +941,10 @@ const PressResponder = { } case 'click': { - removeRootEventTypes(context, state); + // "keyup" occurs after "click" + if (state.pointerType !== 'keyboard') { + removeRootEventTypes(context, state); + } if (state.shouldPreventClick) { nativeEvent.preventDefault(); } diff --git a/packages/react-events/src/__tests__/Press-test.internal.js b/packages/react-events/src/__tests__/Press-test.internal.js index deaa330378..74a13c7a5d 100644 --- a/packages/react-events/src/__tests__/Press-test.internal.js +++ b/packages/react-events/src/__tests__/Press-test.internal.js @@ -335,6 +335,8 @@ describe('Event responder: Press', () => { it('is called after "keyup" event for Enter', () => { ref.current.dispatchEvent(createKeyboardEvent('keydown', {key: 'Enter'})); + // click occurs before keyup + ref.current.dispatchEvent(createKeyboardEvent('click')); ref.current.dispatchEvent(createKeyboardEvent('keyup', {key: 'Enter'})); expect(onPressEnd).toHaveBeenCalledTimes(1); expect(onPressEnd).toHaveBeenCalledWith(