2

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

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

但是,以下代码在从 jQuery 运行时调用所有三个假定数组的#test返回值:undefined

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

可以看这里的demo > http://jsfiddle.net/c7UKV/1/(需要在移动设备上查看,也可以直接看这里的结果 > http://jsfiddle.net/c7UKV/ 1/嵌入式/结果/)。

我的问题是有人知道解决方法,还是 jQuery 以某种我不知道的方式规范化事件?我测试的所有 jQuery 版本(1.6+)以及 iOS 模拟器和物理 iDevice 上都存在这个问题。

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

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

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

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

4

1 回答 1

5

文档中所述,并非原始的每个属性都event被复制到 jQuery 的规范化事件对象中。

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

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

function checkCoords(e){
  alert(e.originalEvent.targetTouches);
  alert(e.originalEvent.touches);
  alert(e.originalEvent.changedTouches);
}
于 2013-02-21T10:48:30.240 回答