Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用JS/jQuery检查浏览器对touchstart的支持?_Javascript_Jquery_Iphone_Mobile_Unobtrusive Javascript - Fatal编程技术网

Javascript 如何使用JS/jQuery检查浏览器对touchstart的支持?

Javascript 如何使用JS/jQuery检查浏览器对touchstart的支持?,javascript,jquery,iphone,mobile,unobtrusive-javascript,Javascript,Jquery,Iphone,Mobile,Unobtrusive Javascript,为了遵循最佳实践,我们尝试根据您使用的设备使用适当的JavaScript/jQuery事件。例如,我们正在构建一个移动站点,该站点有一个标记,该标记将包含onclick或touch事件。对于iPhone,我们希望使用“touchstart”事件。在将该处理程序绑定到对象之前,我们想测试他们的设备是否支持“touchstart”。如果没有,那么我们将绑定“onclick” 执行此操作的最佳方法是什么?您可以检测以下各项是否支持此事件: if ('ontouchstart' in document.

为了遵循最佳实践,我们尝试根据您使用的设备使用适当的JavaScript/jQuery事件。例如,我们正在构建一个移动站点,该站点有一个标记,该标记将包含onclick或touch事件。对于iPhone,我们希望使用“touchstart”事件。在将该处理程序绑定到对象之前,我们想测试他们的设备是否支持“touchstart”。如果没有,那么我们将绑定“onclick”


执行此操作的最佳方法是什么?

您可以检测以下各项是否支持此事件:

if ('ontouchstart' in document.documentElement) {
  //...
}
看看这篇文章:


这里发布的
isEventSupported
函数非常擅长检测各种各样的事件,而且它是跨浏览器的。

您可以检查
typeof document.body.ontouchstart==“未定义”
要返回到正常的dom事件

我做了一个完整的演示,在每个浏览器中都可以使用此问题解决方案的完整源代码:。

使用此代码检测设备是否支持触摸

也适用于使用“MSPointerDown”事件而不是“touchmove”的windows 8 IE10

var supportsTouch = false;
if ('ontouchstart' in window) {
    //iOS & android
    supportsTouch = true;

} else if(window.navigator.msPointerEnabled) {

    // Windows
    // To test for touch capable hardware 
    if(navigator.msMaxTouchPoints) {
        supportsTouch = true;
    }

}

我有点想+1这个,但我知道Firefox会因为错误的原因返回
false
。Firefox对以这种方式检查的所有事件都返回false(我知道,这是Fx糟糕的罕见情况之一)。但是,本文确实讨论了这一点,因此您得到了+1;-)巨大的资源。谢谢你的快速帮助!这仅检测浏览器是否支持触摸事件,而不确定设备是否支持触摸事件。在非触摸设备上的Chrome中尝试此操作。这与
document.documentElement.hasOwnProperty('ontouchstart')
相同吗?@RobG我在非触摸笔记本电脑上的Chrome 35.0.1916.153 m中运行了此操作,得到了预期的
false
。我遗漏了什么吗?为什么不把它简化为一行呢
var supportsTouch=(window | | | window.navigator.msPointerEnabled中的“ontouchstart”)
不幸的是,这对我来说不适用于HP笔记本电脑(不带触摸屏)上Windows 10上的ie 11。它错误地说supportsTouch=true。但当我将某个东西绑定到“touchstart”时,它永远不会被执行。有什么办法吗?这是错误的。指针API不仅仅适用于触摸设备。它适用于几乎所有的输入设备。修改答案以检查MSMAXStouchpoints(触摸支持测试)您的示例会产生大量误报。无论触摸设备是否实际连接到系统,默认情况下有许多浏览器实现触摸API。@Nilpo也许你是对的。这篇文章是七年前写的。