From 5eeef9e3d215d4cb22c5d48d249d1509219455c6 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 5 Jun 2018 09:02:35 -0700 Subject: [PATCH] [fix] only call preventDefault for clicks on links The previous incarnation of this fix would cancel clicks that bubble up to elements like ScrollViews, with undesired impact on child element events. Instead, limit the hack to elements with accessibilityRole=link. Fix #985 --- .../src/exports/createElement/index.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/react-native-web/src/exports/createElement/index.js b/packages/react-native-web/src/exports/createElement/index.js index 32780318..10d3f460 100644 --- a/packages/react-native-web/src/exports/createElement/index.js +++ b/packages/react-native-web/src/exports/createElement/index.js @@ -50,6 +50,7 @@ const adjustProps = domProps => { const isButtonRole = role === 'button'; const isDisabled = AccessibilityUtil.isDisabled(domProps); + const isLinkRole = role === 'link'; Object.keys(domProps).forEach(propName => { const prop = domProps[propName]; @@ -67,11 +68,11 @@ const adjustProps = domProps => { } }); - // Cancel click events if the responder system is being used. Click events - // are not an expected part of the React Native API, and browsers dispatch - // click events that cannot otherwise be cancelled from preceding mouse - // events in the responder system. - if (onResponderRelease) { + // Cancel click events if the responder system is being used on a link + // element. Click events are not an expected part of the React Native API, + // and browsers dispatch click events that cannot otherwise be cancelled from + // preceding mouse events in the responder system. + if (isLinkRole && onResponderRelease) { domProps.onClick = function(e) { if (!e.isDefaultPrevented() && !isModifiedEvent(e.nativeEvent) && !domProps.target) { e.preventDefault();