Событие JQuery Mobile swipe запускает только каждое второе прикосновение

Я настроил событие swipeleft в своем приложении для перемещения между полями формы. Все поля генерируются динамически, поэтому я не переключаюсь между страницами, я очищаю и заново генерирую все элементы DOM. Проблема заключается в том, что событие смахивания срабатывает только каждый раз, когда я пролистываю страницу или касаюсь или касаюсь чего-либо на странице.

Вот код, который устанавливает события:

$(document).delegate("#scorePage", "pageshow", function() {
  $.event.special.swipe.scrollSupressionThreshold = 10;
  $.event.special.swipe.horizontalDistanceThreshold = 30;
  $.event.special.swipe.durationThreshold = 500;
  $.event.special.swipe.verticalDistanceThreshold = 75;
  $('#divFoo').on("swipeleft", swipeLeftHandler);
  $('#divFoo').on("swiperight", swipeRightHandler);
  tableCreate(traits[0].keyboardID);
}); 

Для контекста tableCreate помещает динамически сгенерированную таблицу в divFoo, содержащую информацию, из которой пользователь может выбирать. Вот сам код события:

function swipeLeftHandler() {
  $("#divFoo").empty();
  traitIndex++;
  tableCreate(traits[traitIndex].keyboardID);
}

Почему мое событие смахивания срабатывает только каждый раз, когда на странице происходит свайп?

В основном тестирую на Android прямо сейчас, если это имеет значение.

Изменить Я использую JQuery Mobile версии 1.4.4.


person ScoobyDrew18    schedule 17.10.2014    source источник
comment
какую версию вы используете? не правильно прикреплять прослушиватели swipe в pageshow, они будут дублироваться.   -  person Omar    schedule 17.10.2014
comment
@ Омар Спасибо, что указали на это, это имеет смысл. Если элементы, к которым я присоединяюсь, находятся в отдельном html-файле, на который я ссылаюсь в index.html, могу ли я по-прежнему использовать deviceready для присоединения этих обработчиков?   -  person ScoobyDrew18    schedule 17.10.2014
comment
Вы используете Кордову? Это должно быть что-то вроде этого stackoverflow.com/a/25542805/1771795 для переопределения значений по умолчанию, оно должно быть заключено в mobileinit событие и помещается в голову после jQuery.js и перед JQM.js   -  person Omar    schedule 18.10.2014
comment
@Omar Да, я использую Phonegap/Cordova версии 3.5. Я изменил код, чтобы обработчики теперь подключались только один раз, но, похоже, это не решило исходную проблему.   -  person ScoobyDrew18    schedule 20.10.2014


Ответы (1)


Я нашел способ обойти эту проблему, просто перевернув собственную реализацию этих событий. Здесь есть пример кода, как сделать что-то подобное:

https://snipt.net/blackdynamo/swipe-up-and-down-support-for-jquery-mobile/

Если кто-то еще использует этот код для решения моей проблемы, обязательно знайте, что в статье реализованы прокрутка вверх и прокрутка вниз, поэтому вам придется адаптировать ее. В конце концов, я не совсем уверен в различиях между этим кодом и реальными реализациями swipeleft и swiperight, но это работает последовательно, поэтому я сокращаю свои потери и продолжаю.

person ScoobyDrew18    schedule 20.10.2014