在iPad上捕捉点击DOM/HTML/BODY事件

Catching the Click on DOM/HTML/BODY event on the iPad

本文关键字:DOM HTML BODY 事件 iPad      更新时间:2023-09-26

我使用jQuery来检测DOM上的点击——或者让我们每次点击。

$(document).click(function(){
   alert("Click :-)");
});

这在除了iPad/iPhone的Safari之外的所有浏览器中都很好。我还尝试过将事件应用到html或body元素上——没有办法。如何检测iPad/iPhone上的常见点击?

谨致问候,Jim

正如我在http://www.danwellman.co.uk/fixing-jquery-click-events-for-the-ipad/您可以测试用户代理,并根据平台使用触摸启动或点击

var ua = navigator.userAgent,
        event = (ua.match(/iPad/i)) ? "touchstart" : "click";
$(document).on(event, function (ev) {
    ...
});

这些答案让我开始朝着正确的方向前进(首先在谷歌上搜索"jquery document.on ipad"),谢谢你,但借用这个答案,我把它简化为这样的东西:

$(document).on("click touchstart", function (ev) {
    ...
});

如果一个平台(如Android或Windows Phone或其他平台)在事件气泡中同时支持点击和触摸启动,这显然会产生不希望的结果,所以如果有人知道的话,请告诉我(我会修复我的代码并删除这个答案!:)

您可以使用touchstart事件。

我使用过这个:

jQuery(document).on('touchstart',function(event){
    //your code here
         });

-也可以绑定到任何DOM对象,而不是"文档"。

这个(来自另一个论坛的答案):

var body = document.getElementsByTagName('body')[0];
 if ("ontouchstart" in window) {
        body.ontouchstart = function(){
   //your code here
         };     
                 };

-同样,您不必使用"body",您可以通过以下方式将变量按类分配给对象:

var dd = document.getElementsByClassName('infoAction')[0]; 
$('html').click(function(){
   alert("Click :-)");
});

这对我有效,我现在测试过了。

即使在页面上没有内容的情况下也可以工作,无论您在页面上单击什么位置。

您可以将click侦听器附加到主包装器元素(比如div,它包含页面中的所有组件)。

<body><div onclick="void(0)">
... your page tags ...
</div></body>

与其他浏览器的行为有一个细微的区别:文档对象只会显示位于"…你的页面标签…"部分的标签的点击事件。

换句话说,假设html和body标签的背景颜色为黄色,它们的子标签的背景色为红色。文档对象将只接收红色区域上的单击。这通常不是一个严重的缺点。

在仅限iPhone 3的上测试