JS:event.touches属性如何工作?

我不明白如何使用event.touches属性。 例如,要获取您应该使用的iPad / iPhone手指的数量

event.touches.length 

那么为什么这个例子代码不工作?

 $('.image').bind('touchstart', function(event) { alert(event.touches.length); }); 

但是,这是工作:

 $('.image').bind('touchstart', function() { alert(event.touches.length); }); 

难道不是相反吗?

在第二种情况下,浏览器的全局(和原始) event对象,而不是特定于jQuery的event对象(在支持全局event浏览器上,并不是所有的事情都是这样 – Firefox不会这样做 – 因为它是一个微软的东西只有一些人已经复制)。

这听起来像jQuery没有传递在其自定义事件对象的touches属性。 如事件对象的文档中所述 ,您可以在第一个示例中使用event.originalEvent来访问它所具有的“特殊属性”,同时仍然获得jQuery规范化事件对象的好处,例如:

 $('.image').bind('touchstart', function(event) { alert(event.originalEvent.touches.length); }); 

…或者你可以告诉jQuery通过在脚本的开头执行一次这个属性来复制该属性:

 jQuery.event.props.push("touches"); 

…因此,你的第一个例子应该开始工作。


注意:如果你不使用jQuery Touch ,你可以看看它。 我的猜测是,除了其他的东西,它增加了touches属性,如上所示(但这只是一个猜测)。