[Webkit-unassigned] [Bug 184250] New: Unable to call event.preventDefault in dynamically added event listener
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Mon Apr 2 17:16:04 PDT 2018
https://bugs.webkit.org/show_bug.cgi?id=184250
Bug ID: 184250
Summary: Unable to call event.preventDefault in dynamically
added event listener
Product: WebKit
Version: Safari 11
Hardware: All
OS: iOS 11
Status: NEW
Severity: Critical
Priority: P2
Component: New Bugs
Assignee: webkit-unassigned at lists.webkit.org
Reporter: alexreardon at gmail.com
Hi there,
When you add an event listener (the parent listener) and you add another event listener inside of it (the child listener), the dynamically added child event listener is not able to use event.preventDefault() as the event is non cancelable. The dynamically added child listener will receive the event - but it is unable to use preventDefault(). This is true regardless of whether the parent event handler is a passive or capture handler (or both).
This is true for all the event types I tested.
Here a simple example that reproduces the issue:
- desktop: https://codepen.io/alexreardon/pen/eMKMmm
- mobile: https://codepen.io/alexreardon/pen/yKEKby
Able to correctly use event.preventDefault() in child listener on:
- Chrome
- Firefox
- Edge
- Internet Explorer 11
- Android: Chrome mobile
- Android: Firefox (which I think just uses chrome under the hood)
- Safari 10.x (I was unable to test 11.2 as I could not find
Not able to use event.preventDefault() in child listener on:
- Safari 11.3 on mac
- Safari 11.3 on iOS 11.3 (as well as the other browsers that use the native browser such as firefox and chrome)
- Safari on iOS 11.2.6 (it looks like there was a configuration where event.preventDefault() was working. I think it had to do with touch-action: manipulation but I am yet to confirm)
This is important to us because we use event.preventDefault() on a touchmove event to prevent native scrolling on mobile. I can
Work around:
You need to add an event handler in a non dynamic way (ie at startup) and then you can use event.preventDefault() as expected.
Impact:
A lot of drag and drop libraries and other tools use event.preventDefault() on touchmove to opt out of native scrolling. Right now this is not possible without adding your own touchmove listener before a touchstart
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20180403/d3f2d18b/attachment-0002.html>
More information about the webkit-unassigned
mailing list