jQuery live () удаляет атрибуты событий iPhone touch? - PullRequest
6 голосов
/ 22 марта 2009

Я связываю живые события со ссылками в моем PhoneGap приложении. Событие срабатывает успешно (подтверждается alert() ing), но кажется, что любые сенсорные данные не прикреплены к объекту события, как это должно быть. Это происходит на всех сенсорных событиях - touchstart, touchmove и touchend.

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

Есть идеи? Я SOL с jQuery.live ()?

Ответы [ 2 ]

16 голосов
/ 31 января 2010

На самом деле, вы можете использовать метод .live. У вас нет свойства event.touches из-за того, как jQuery обрабатывает события внутренне. Чтобы «исправить» события, 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

2 голосов
/ 23 марта 2009

Сенсорные события в настоящее время не поддерживаются Events / live .

Из документации:

Возможные значения события: нажмите, dblclick, mousedown, mouseup, MouseMove, Mouseover, Mouseout, keydown, нажатие клавиши, keyup

В настоящее время не поддерживается: размытие, фокусировка, mouseenter, mouseleave, изменить, отправить

Возможно, вы захотите попробовать использовать click, если это будет соответствовать вашим потребностям, или вы можете переключиться на использование livequery , которое, вероятно, его поддержит. (livequery - это то, на чем изначально был основан live, я не уверен, почему он не поддерживает все те же события)

...