#javascript #jquery #html #jquery-mobile
#javascript #jquery #HTML #jquery-mobile
Вопрос:
Я работаю в jQuery mobile, и это здорово. У меня есть вопрос о предоставлении параметров внутри хэш-части URL-адреса.
Вот несколько примеров кода. В content
части домашней страницы я хотел бы иметь возможность ссылаться на страницу с именем, например, ‘#photo-123’, и загружать страницу с «фото» ниже. Затем я бы извлек номер фотографии из URL-адреса и загрузил изображение 123.
<!-- Home page -->
<div data-role="page" id="home">
<div data-role="header">
<h1>Home</h1>
</div>
<div data-role="content">
<p><a href="#photo" data-role="button">Photo ###</a></p>
</div>
</div>
<!-- Photo page -->
<div data-role="page" id="photo">
<div data-role="header">
<h1>Photo ###</h1>
</div>
<div data-role="content">
<img id="myphoto" src="" />
</div>
</div>
Это для того, чтобы я мог повторно использовать URL-адрес, то есть пользователь может перезагрузить эту страницу напрямую.
Возможно ли передавать параметры внутри URL-хэша с помощью jQuery mobile? (или вообще с HTML в целом — я знаю, что это возможно, например, с плагином BBQ, но я бы предпочел избегать плагинов, если это возможно)
Комментарии:
1. Кстати, эта часть URL-адреса является «фрагментом».
2. Не уверен, что вы все еще ищете решение этой проблемы, но я создал плагин для этого.
Ответ №1:
Вы можете использовать глобальные перехватчики событий и теги данных для обработки и сохранения параметров для внутренних (т. Е. между #blah -> #blah2) переходов:
-
В вашем HTML вы можете перейти
< a href=»#photo» data-params=»id=123″>….< / a>
-
Перехватывайте клики по всем ссылкам и ищите конкретный элемент данных, скажем, data-params:
$('a').live('click', function(e) { params = $(e.target).jqmData("params") } )
В этом случае вы создаете глобальный объект params, к которому вы должны иметь единый доступ из всего вашего кода.
Комментарии:
1. Спасибо. Боюсь, у меня это не сработает, потому что я хочу иметь возможность добавлять ссылку в закладки, поэтому мне нужны параметры в URL.
Ответ №2:
Если вы можете структурировать свои хэши как #photo?id = 123, что-то вроде этого может сработать:
$("#page").live("pageinit", function(e) {
var id = $(e.target).attr("data-url").replace(/.*id=/, "");
//now you have the id, do page-rendering logic
});
И перехватывать прямые ссылки:
if (window.location.hash amp;amp; window.location.hash.indexOf("?") !== -1) {
var pageID = window.location.hash.split("?")[0];
$(pageID).trigger("pageinit");
}
Ответ №3:
вы хотите использовать .changPage() функцию
$("[name=button_name]").click(function() {
$.mobile.changePage('anotherPage.php?parm=123','slide',false,true);
});
Комментарии:
1. итак, использование GET parameters — единственный способ? ничего умного, что я могу сделать с хэшами?
2. насколько я знаю, пока нет, после выхода rc i могут появиться новые материалы.. возможно, вы захотите посмотреть, подключатся ли сюда другие, для меня это все еще довольно ново
Ответ №4:
Вы могли бы сделать что-то вроде этого:
$('#photo').ready(function () {
var photoId = window.location.hash.replace("#photo", "");
$("#myphoto").attr("src", "http://dummyimage.com/600x400/000/" photoId);
window.location.hash = "#photo";
});
Это заставит jQuery перейти на #photo
страницу, однако сначала необходимо остановить попытку загрузки jQuery mobile #photofff
. В конечном итоге это приводит к быстрому отображению на странице сообщения об ошибке при загрузке страницы, а затем перенаправлению на исправленный тег #hash.
Обновить
Если вы отключите отслеживание хэша на этой странице, вы сможете удалить отображение сообщения об ошибке.
<script type="text/javascript">
$.mobile.hashListeningEnabled = false;
</script>
$('#photo').ready(function () {
var photoId = window.location.hash.replace("#photo", "");
$("#myphoto").attr("src", "http://dummyimage.com/600x400/000/" photoId);
$.mobile.changePage("#photo");
});
Ответ №5:
Проверьте это исправление:
https://github.com/flodev/jquery-mobile/commit/f3b2e5d84493f3b8b27f9f423863cab2a416007a
Была похожая проблема, но добавление этой строки кода в jquery.mobile js-файл позволило мне передавать параметры в URL-адресе без необходимости добавлять плагины и решения для маршрутизации js.