JavaScript中的touchstart不再返回TouchList

时间:2013-02-21 10:18:26

标签: javascript jquery javascript-events

我遇到了一个非常奇怪的问题。我将touchstart事件绑定到一个元素,并希望检索事件的X和Y坐标。所有documentation在线表示可以通过以下方式之一获得:

  • e.touches
  • e.targetTouches
  • e.changedTouches

但是,当从jQuery运行时,下面的代码#test为所有三个假定的数组返回undefined

$('#test').bind('touchstart', function(e) {
    alert(e.targetTouches);
    alert(e.touches);
    alert(e.changedTouches);
});

你可以在这里看到一个演示> http://jsfiddle.net/c7UKV/1/(您需要在移动设备上查看,或者您可以直接查看结果> http://jsfiddle.net/c7UKV/1/embedded/result/)。

我的问题是,是否有人知道某项工作,或者是jQuery以某种我不知道的方式规范事件?我测试的所有版本的jQuery(1.6+)以及iOS模拟器和物理iDevices都存在这个问题。

作为对上述内容的更新,使用vanilla JavaScript(而不是jQuery)调用它会返回正确的结果。例如,以下代码可以正常运行:

document.getElementById('test').addEventListener('touchstart', checkCoords, false);

function checkCoords(e)
{
    alert(e.targetTouches);
    alert(e.touches);
    alert(e.changedTouches);
}

所以看起来这是一个jQuery问题,而不是其他任何问题。您可以在此jsFiddle中看到上述内容正常工作。

1 个答案:

答案 0 :(得分:5)

作为described in the documentation,并非原始event的每个属性都被复制到jQuery的规范化事件对象。

您仍然可以使用originalEvent对象访问它:

$('#test').bind('touchstart', checkCoords );

function checkCoords(e){
  alert(e.originalEvent.targetTouches);
  alert(e.originalEvent.touches);
  alert(e.originalEvent.changedTouches);
}