移动设备上的Google Chrome浏览器会在文件输入中触发其他不需要的MouseEvent

坦率

我在移动设备上遇到了与Google Chrome(78)有关的一些事件相关问题。我有一个设置,在单击按钮时会附加文件输入(包括标签)。输入的文件将完全替换按钮,并将被附加在与按钮原先完全相同的位置。

在大多数浏览器上,这都可以正常工作。但是,似乎移动版的Google Chrome浏览器在首次触摸按钮后会触发延迟的点击事件,从而导致点击激活文件上传对话框。即使在初次触摸时甚至没有输入文件,也将在文件输入上触发此单击。

因为我正在侦听TouchEvent,所以无法停止按钮单击的传播,但是其他事件是MouseEvent。我不想听MouseEvent只是为了stopPropagation以防止任何跨浏览器问题。PreventDefault也不是一个选项,因为该按钮位于滑块中,这会破坏滑块的功能。

另一个选择是隐藏文件输入,直到事件循环通过(setTimeout为0)为止,这基本上可以解决该问题,但是我希望有一个更优雅的解决方案。你们中的任何人是否有可能解决此问题?

我已经用展示问题的最小代码示例设置了CodePen:https ://codepen.io/frankderouge/pen/wvvRPRV

基本设置是文件输入最初被隐藏,然后在单击按钮时显示。

//This listener is added to the 'button'
document.querySelector('.toggle_off').addEventListener('touchstart', (e) => {

  //This won't do anything since we're handling a touch event, not a click event. 
  e.stopPropagation();  

  //This fixes the dialog open but would break sliding functionality
  //e.preventDefault();

  //Hide the button
  e.target.style.display = 'none';

  //Then show the file input, on which the additional event will be triggered
  document.querySelector('.toggle_on').style.display = 'block';
});

提前致谢!

坦率

事实证明,这被称为“幽灵点击”,出于兼容性原因而存在,实际上是“预期行为”。我没想到如果鼠标事件最初没有绑定到原始元素,则不会发生幻影单击,但是显然这确实发生在某些浏览器中。

可以通过在TouchEvent上调用preventDefault来防止幻影单击,我在最初的帖子中说过:

PreventDefault也不是一个选项,因为该按钮位于滑块中,这会破坏滑块的功能。

但是我最近了解到,在触摸的“一部分”上调用preventDefault并不重要,因为在所有触摸事件之后总是会触发幻影点击。因此,如果在touchend而不是touchstart或touchmove上调用preventDefault,则不会发生阻止滚动的问题。

document.querySelector('.element').addEventListener('touchstart', (e) => {
  //Process the touch start event
});

document.querySelector('.element').addEventListener('touchend', (e) => {
  //Prevent default on the touchend, preventing the ghost click from happening
  //But still allowing the users to zoom and scroll
  e.preventDefault();
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

移动设备上的触摸输入

来自分类Dev

HTML5-移动浏览器上不需要的<form>自动聚焦

来自分类Dev

在移动设备上禁用的模型浏览器中搜索

来自分类Dev

XPages extlib 移动控件中包含的按钮的 onComplete 不会在移动设备上触发,但在桌面浏览器中工作正常

来自分类Dev

在移动设备上更改浏览器标签颜色

来自分类Dev

ng单击移动或平板设备上的触发

来自分类Dev

keydown无法在移动设备上启动Chrome

来自分类Dev

JS中的移动设备上的点击与触摸

来自分类Dev

在Android设备上的Google Chrome浏览器中从Node.js服务器下载文件的错误

来自分类Dev

无法将Google Chrome浏览器标签页移动到Ubuntu中的其他监视器

来自分类Dev

移动 Chrome 浏览器的显示与其他移动浏览器不同

来自分类Dev

如何阻止触摸事件落入移动设备的Web浏览器中的覆盖对象上?

来自分类Dev

在Android设备上的Google Chrome浏览器上从Node.js服务器下载文件的错误

来自分类Dev

Windows上的Chrome不支持主机文件,而其他浏览器却支持

来自分类Dev

使用移动设备上的触摸输入控制播放器

来自分类Dev

在桌面浏览器上的固定位置,在移动设备(Android,iOS ...)上的相对/静态位置

来自分类Dev

当浏览器不在焦点上时,jVectorMap onRegionClick不会在Chrome中的首次点击上触发

来自分类Dev

为什么我的CSS3动画在Google Chrome浏览器中不流畅(但在其他浏览器上却不流畅)?

来自分类Dev

在Google Chrome或其他浏览器中从书签打开书签链接的快捷键?

来自分类Dev

网站不会在移动设备上向右或向左滚动

来自分类Dev

翻转卡不会在移动设备上翻转

来自分类Dev

网站不会在移动设备上向右或向左滚动

来自分类Dev

Wordpress 不会在移动设备上显示部分 css

来自分类Dev

Node.js服务器完成与浏览器上的移动设备相同的功能

来自分类Dev

jQuery / JavaScript OnClick事件未在移动设备上触发

来自分类Dev

React Click事件未在移动设备上触发

来自分类Dev

在onclick中指定的功能无法在移动设备上触发

来自分类Dev

jQuery / JavaScript OnClick事件未在移动设备上触发

来自分类Dev

滚动到移动设备上的元素时触发事件

Related 相关文章

  1. 1

    移动设备上的触摸输入

  2. 2

    HTML5-移动浏览器上不需要的<form>自动聚焦

  3. 3

    在移动设备上禁用的模型浏览器中搜索

  4. 4

    XPages extlib 移动控件中包含的按钮的 onComplete 不会在移动设备上触发,但在桌面浏览器中工作正常

  5. 5

    在移动设备上更改浏览器标签颜色

  6. 6

    ng单击移动或平板设备上的触发

  7. 7

    keydown无法在移动设备上启动Chrome

  8. 8

    JS中的移动设备上的点击与触摸

  9. 9

    在Android设备上的Google Chrome浏览器中从Node.js服务器下载文件的错误

  10. 10

    无法将Google Chrome浏览器标签页移动到Ubuntu中的其他监视器

  11. 11

    移动 Chrome 浏览器的显示与其他移动浏览器不同

  12. 12

    如何阻止触摸事件落入移动设备的Web浏览器中的覆盖对象上?

  13. 13

    在Android设备上的Google Chrome浏览器上从Node.js服务器下载文件的错误

  14. 14

    Windows上的Chrome不支持主机文件,而其他浏览器却支持

  15. 15

    使用移动设备上的触摸输入控制播放器

  16. 16

    在桌面浏览器上的固定位置,在移动设备(Android,iOS ...)上的相对/静态位置

  17. 17

    当浏览器不在焦点上时,jVectorMap onRegionClick不会在Chrome中的首次点击上触发

  18. 18

    为什么我的CSS3动画在Google Chrome浏览器中不流畅(但在其他浏览器上却不流畅)?

  19. 19

    在Google Chrome或其他浏览器中从书签打开书签链接的快捷键?

  20. 20

    网站不会在移动设备上向右或向左滚动

  21. 21

    翻转卡不会在移动设备上翻转

  22. 22

    网站不会在移动设备上向右或向左滚动

  23. 23

    Wordpress 不会在移动设备上显示部分 css

  24. 24

    Node.js服务器完成与浏览器上的移动设备相同的功能

  25. 25

    jQuery / JavaScript OnClick事件未在移动设备上触发

  26. 26

    React Click事件未在移动设备上触发

  27. 27

    在onclick中指定的功能无法在移动设备上触发

  28. 28

    jQuery / JavaScript OnClick事件未在移动设备上触发

  29. 29

    滚动到移动设备上的元素时触发事件

热门标签

归档