JQuery Mobile загружает страницу в DOM, даже если я не прошу ее - PullRequest
4 голосов
/ 30 сентября 2011

Вот сценарий:

(к вашему сведению, когда я говорю «window.location = ...», это вызывается нажатием кнопки)

У меня есть тристраницы: 1.html, 2.html, 3.html.Я перемещаюсь следующим образом:

1.html --- window.location="2.html" ---> 2.html

2.html --- <a href="3.html" /> ---> 3.html

        click Back button

2.html --- window.location="1.html" -> 1.html

На последнем шаге 1.html загружает , но затем содержимое 2.html загружается внутриDOM заменяет содержимое 1.html, поэтому я на 1.html, но вижу содержимое 2.html.

Что происходит?Почему jQuery mobile считает, что он должен загружать содержимое 2.html?

Я уверен, что это связано с историей и кнопкой Назад.Если я просто перемещаюсь между 1.html и 2.html без использования кнопки «Назад», это работает.

обновление Вот код http://jsfiddle.net/x6bxN/ Для воспроизведения вам понадобится взять код из окна HTML и разделить его на три отдельных файла.

Ответы [ 4 ]

3 голосов
/ 11 октября 2011

То, что происходит, - это то, что вы выходите за рамки jQM, но 1.html находится в location.hash.

Изменения хеша, которые происходят независимо от щелчка, например, когда пользователь нажимает кнопку «Назад», обрабатываются через событие hashchange, которое привязывается к объекту окна с помощью плагина специального события hashchange Бена Алмана (включены в jQuery Mobile).Когда происходит изменение хеша (а также при загрузке первой страницы), обработчик события hashchange отправит location.hash в функцию $ .mobile.changePage (), которая, в свою очередь, загружает или открывает страницу, на которую ссылаются.

Я предполагаю, что location.hash имеет начальный 1.html при загрузке, но не отслеживает новую страницу при использовании window.location для перехода на новую страницу.Поскольку вы используете кнопку возврата браузера, jQM использует последнее отслеживаемое местоположение, которое в вашем случае составляет 1.html.

. Я бы предложил использовать jQM $.mobile.changePage(), если вам нужно отслеживать местоположение.Подробнее о jQM Navigation можно узнать из документов:

0 голосов
/ 13 октября 2011

дикая догадка. Вы не жестко закодировали css class ui-page-active в элемент .ui-page, верно? потому что это приведет к появлению обеих страниц.

0 голосов
/ 10 октября 2011

Вы пытались специально установить data-ajax = "false" в своих ссылках?Или rel = "external", хотя предполагается, что он будет использоваться, только если вы хотите перейти на другой домен.

Если вы не установите ни один из них, я боюсь, что JQM перехватит.

Попробуйте, если он работает с data-ajax = "false".

На самом деле у меня похожая проблема с обычными JQM-Ajax-ссылками.Я хочу, чтобы страницы загружались через Ajax, но если я делаю так:

  • перейти на страницу1
  • перейти на страницу2a
  • перейти на страницу2b = перезагрузить страницу1 ...

Очень раздражает, и я уже подал проблему на Github , но так как вы не хотите использовать Ajax, у вас все должно быть в порядке.

Позвольте мнезнать, если это работает.

0 голосов
/ 08 октября 2011

Если вы хотите, чтобы jQuery mobile обрабатывал историю и кнопку возврата, вам нужно использовать $ .mobile.changePage для изменения страницы (в отличие от window.location = ..).

Больше информации здесь: http://jquerymobile.com/demos/1.0rc1/docs/api/methods.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...