Отключение jQM на мобильных приложениях
14.12.2019

При использовании темы jQuery Mobile Smartphone страницы приложения начинают вести себя не как отдельные страницы со своим URL, а как контент текущей страницы. Это значит что загружаются они через ajax и встраиваются как содержимое текущей страницы. URL страницы не меняется, предыдущая страница не удаляется, а просто временно прячется. При этом возможно возникновение ситуации когда у вас в браузере в дереве объектов окажутся две одинаковые страницы, но одна видна, вторая спрятана в невидимом div-е. Это негативно сказывается на поиске элементов по их ID и может приводить к неприятным казусам.

К счастью есть простой способ отключить этот механизм, сохранив при этом всю красоту и удобство элементов мобильного приложения. Поместите следующий javascript код в шаблоны всех используемых вами страниц в раздел "Function and Global Variable Declaration":

$(document).ready(function() {
  $.mobile.ajaxEnabled = false;
  $.mobile.hashListeningEnabled = false;
  $.mobile.pushStateEnabled = false;
});
 
P.S.: Обнаружилась проблема. Элементы Select List с количеством элементов больше 10 начинает вести себя странно. Во-первых вместо стандартного выпадающего списка открывается диалоговое окно со списком элементов. Выглядит это не плохо, но вот выбор элемента автоматически не закрывает список, приходится закрывать список по крестику в заголовке. Во-вторых, после закрытия списка от него что то остается в стеке событий и при клике в свободном пространстве формы вылазит диалоговое окно с пустым списком, которое уже не закрывается по крестику. Вылечить удалось через установку атрибута data-native-menu=true у элементов <select>, но делать это нужно до обработки фреймворком JQM содержимого страницы. Добавил в шаблон страницы в раздел "body" между плейсхолдерами #FORM_CLOSE# и #PAGE_JAVASCRIPT# следующий код:
#FORM_CLOSE#
<script type="text/javascript">
  $("select").attr("data-native-menu", "true");
</script>
#PAGE_JAVASCRIPT#
release 1.0