6

我在PhoneGap应用程序中的链接上绑定实时事件。该事件确实成功触发(由alert()ing 确认),但似乎任何触摸数据都没有像应有的那样附加到事件对象。这发生在所有触摸事件上 - touchstarttouchmovetouchend

$('a').live('touchend', function(event) {
  event.preventDefault();
  alert(event.touches.length); // event.touches should be populated!
});

有任何想法吗?我是 jQuery.live() 的 SOL 吗?

4

2 回答 2

16

实际上,您可以使用 .live 方法。由于 jQuery 在内部处理事件的方式,您没有 event.touches 属性。为了“修复”事件,jQuery 克隆了该事件。这样做时,出于性能原因,它只复制有限数量的属性。但是,您仍然可以通过 event.originalEvent 属性访问原始事件对象。

因此,您的示例代码需要如下所示:

$('a').live('touchend', function(event) {
  event.preventDefault();
  console.log(event.originalEvent.touches.length);
});

以下是复制过来的属性:http: //github.com/jquery/jquery/blob/master/src/event.js#L411

于 2010-01-30T21:02:49.007 回答
2

Events/live当前不支持触摸事件。

从文档中:

可能的事件值:click、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、keydown、keypress、keyup

目前不支持:blur、focus、mouseenter、mouseleave、change、submit

如果适合您的需要,您可能要考虑尝试使用 click ,或者您可以切换到使用livequery,这可能会支持它。(livequery 是 live 最初基于的,我不确定为什么它不支持所有相同的事件)

于 2009-03-23T11:44:28.607 回答