JQuery Mobile странное поведение, событие выбора onchange возвращается все время (только на SAFARI IPHONE) - PullRequest
2 голосов
/ 02 февраля 2012

Я разработал динамический веб-сайт для местной газеты в Греции, и у меня в мобильном издании (jquery mobile) странное поведение:

  1. У меня есть выбор сверхукаждой страницы с категориями (вверху справа), и когда я выбираю оттуда любую категорию, я ловлю событие onchange и принимаю значение параметра, который содержит целевой URL.Страница изменилась, но сразу возвращается к исходной (вызывающей) странице.

  2. У меня внутри страницы вид списка с теми же URL-адресами, что и у верхнего выбора (категории), и если я нажимаюпо этим ссылкам (из списка) все идет хорошо.

3.Это поведение ТОЛЬКО может быть воспроизведено из любого браузера IPHONE SAFARI.

Я читал некоторые ответы более или менее с той же проблемой, но любой обходной путь мне помог.URL мобильной версии: http://m.stagonnews.gr

Спасибо.

1 Ответ

1 голос
/ 03 февраля 2012

Не используйте функцию $ (document) .ready ()!

Документация jQuery Mobile предлагает документацию по этому вопросу! Он срабатывает каждый раз, когда вы меняете страницу, и, поскольку всплывающее диалоговое окно не записывает в историю, возможно, оно может перенаправить вас на нее Док здесь

Используйте живую инициализацию в поле выбора, аналогично следующему:

   //on all pages you have a div with data-role="header" | assign an id to it
   //if this doesn't work, assign the live eventto your page id, not header id
$('#your_header_id').live('pageshow',function (event) { //or 'pagecreate'
       //load function and fire the changing event when user changes the select
   $('select[name=select-choice-a]').change(function(event){
       //make sure it returns the exact value of select
        //if not, there is a problem in your select value method
      console.log('Change to page: #' + this.options[this.selectedIndex].value);

       //to the change page method that changes the page
        //you could also do the $.mobile.loadPage method to insert it into DOM before change
      $.mobile.changePage('#' + this.options[this.selectedIndex].value,{changeHash: false})
   })
});

Мое мнение об использовании якорей (# element_id's) в мобильном приложении, разработанном с помощью jQuery Mobile, таково: DONT !, но это только мое мнение! Я использую конкретные файлы HTML и указываю на них ссылку! Чтобы передать параметр на другую страницу и получить его, я использую специальную функцию, которая возвращает мне сам параметр, и делаю с ним классные приятные вещи. Я написал на другой вопрос здесь что это за функция и как вы можете ее использовать. Затем я меняю страницы только с помощью $ .mobile.changePage ('myPage.html? Id =' + variable).

Я использую этот метод, потому что я могу очень хорошо структурировать свое приложение с ограниченным объемом данных, и я могу контролировать все мои html-файлы с помощью одного файла javascript с событиями .live.

Короткое резюме:

index.html <- load all javascripts/css/whatever here
other_file.html <- declare only <html><head></head><body> jQM specific div's here (like <div data-role"page"></div> etc,)</body></html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...