jQuery live() удаляет атрибуты событий касания iPhone?
Вопрос
Я привязываю живые события к ссылкам в моем 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()?
Решение
События касания в настоящее время не поддерживаются События/живые трансляции.
Из документации:
Возможные значения события:Нажмите, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup
В настоящее время не поддерживается:размытие, фокусировка, мышь, мышцы, изменение, представление
Возможно, вы захотите попробовать использовать щелчок, если это соответствует вашим потребностям, или вы можете переключиться на использование живой запрос, который, вероятно, поддержит это.(livequery — это то, на чем изначально был основан Live, я не уверен, почему он не поддерживает все те же события)
Другие советы
На самом деле вы можете использовать метод .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