2009-03-22 10 views
6

私のPhoneGapアプリ内のリンクにライブイベントをバインドしています。イベントは正常に実行されます(alert())。しかし、そうでなければならないようなイベントデータにはタッチデータが添付されていないようです。これは、すべてのタッチイベント(touchstarttouchmove、およびtouchend)で発生します。jQuery live()iPhoneタッチイベントの属性を削除しますか?

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

私はjQuery.live()でSOLですか?

答えて

2

タッチイベントは現在Events/liveでサポートされていません。

ドキュメントから:

可能なイベント値:クリックし、 DBLCLICK、マウスダウン、のmouseup、 のMouseMove、マウスオーバー、マウスアウト、 のKeyDown、キーの押下、keyUpイベント

は、現在サポートされていません:ぼかしを、フォーカス、 mouseenter、mouseleave、change、submit

クリックしてみるとよいでしょうあなたのニーズに合ったものにするか、おそらくそれをサポートするlivequeryを使用して切り替えることができます。 (livequeryは元々生きていたものなので、なぜ同じイベントのすべてをサポートしているのか分かりません)

+0

私はlivequery、感謝を試してみましょう。タッチイベントが捕まっているのを見て、彼らはかなりサポートされていたと思っていましたが、私はすべてのイベント属性を渡す余分なことが起こっていると思います。 – ceejayoz

+0

私はlivequeryがタイマーを使用していると信じています。 jQueryチームは、より効率的ですが制限された別の方法を使用しました。 – Jab

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

+0

これは、新しいjQuery 1.4でも当てはまります。 1.3ではそうではなかった。 – ceejayoz

+1

jQuery 1.3.xは、同じ数の共通プロパティをコピーし、元のイベントをoriginalEventプロパティとして公開するという同じ動作をしました。関連ソース:http://github.com/jquery/jquery/blob/1.3/src/event.js#L282 –

関連する問題