jquery JavaScript中的touchstart不再返回TouchList

2vuwiymt  于 2022-11-03  发布在  jQuery
关注(0)|答案(1)|浏览(133)

我遇到了一个非常奇怪的问题。我正在将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);
});

你可以在这里看到演示〉http://jsfiddle.net/c7UKV/1/(你需要在移动的设备上查看它,或者你可以直接在这里看到结果〉http://jsfiddle.net/c7UKV/1/embedded/result/)。
我的问题是,是否有人知道一个变通方案,或者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中正常工作。

piwo6bdm

piwo6bdm1#

作为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);
}

相关问题