Window.click 事件不会在 IOS Safari 上触发 - 仅限 JavaScript

Nic*_*kar 6 html javascript safari ios angularjs

香草javascript -

document.addEventListener("click", function(){ alert('click fired');});
Run Code Online (Sandbox Code Playgroud)

带角度 2 + -

 @HostListener('window: click', ['$event'])
        public iosSafariClick(e: any): void {
         alert('event fired');
        }
Run Code Online (Sandbox Code Playgroud)

这些方法都不适用于 iPad 上的 IOS Safari。

除非我单击某个按钮、超链接或任何可操作的项目,否则不会触发Click事件。

我的目标是在“div 元素”上触发模糊事件。

为此,我试图检查是否在 HTML 正文上触发了任何点击事件,并检查它是否不在“div 元素”上。

HTML >

<html>
  <body>
    <div id= 'menu'>123...</div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Angular 组件 > 打字稿 >

 @HostListener('window: click', ['$event'])
   public iosSafariClick(e: any): void {
     if(e.target.id !== 'menu'){
       this.menu = false;  // to close menu 
     }        
   }
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 javascript 或 angular 来克服这个障碍?

Nic*_*ico 6

当使用基于触摸的设备时,发送到浏览器的事件是不同的。它还为开发人员提供了准确的用例,以供其设计和开发。

我假设由于没有鼠标,因此不会有单击事件。

摘自 MDN:为了为基于触摸的用户界面提供高质量支持,触摸事件提供了解释触摸屏或触控板上手指(或手写笔)活动的能力。

尝试使用: document.addEventListener('touchstart', () => console.log('touch called'));

您始终可以选择使用function () {}而不是() => {}

查看完整详细信息:https ://developer.mozilla.org/en/docs/Web/API/Touch_events


bre*_*son 5

我对 Angular 的遗忘比我记得的还要多,但当点击映射到“窗口”时,我遇到了同样的问题。将侦听器从“窗口”切换到“主体”修复了 Safari 中的问题。

善于倾听

document.querySelector('body').addEventListener('click', e => {
  console.log('clicked ', e)
// oh yeah, I'm good!
})
Run Code Online (Sandbox Code Playgroud)

不好的倾听者

window.addEventListener('click', e => {
  console.log('clicked ', e)
// oh yeah, I'm good!
})
Run Code Online (Sandbox Code Playgroud)