Я создаю веб-сайт, на котором я хотел бы легко переходить между страницами (например, приложение). Для этого я решил использовать ajax-содержимое, которое мне нужно с запрашиваемой страницы, с предварительным загрузчиком между ними как транзистором. У меня есть следующий код:Содержание страницы Ajax'ing; ранее нажатая ссылка не ведет себя одинаково во второй раз после того, как обратная кнопка нажата
var url = "";
var historyUrl = "";
$('a').on('click', function(e){
url = $(this).attr("href");
historyUrl = window.location.pathname;
e.preventDefault();
$('#wrap main').removeClass('active');
$("#wrap main").load(url + " #wrap main", function (responseText, textStatus, XMLHttpRequest) {
if (textStatus == "success") {
setTimeout(function() {
$('#wrap main').addClass('active');
}, 1000);
history.pushState(null, null, url);
}
if (textStatus == "error") {
// Error out
}
});
e.stopPropagation();
});
$(window).on('popstate', function(){
$('#wrap main').removeClass('active');
$("#wrap main").load(historyUrl + " #wrap main", function (responseText, textStatus, XMLHttpRequest) {
if (textStatus == "success") {
setTimeout(function() {
$('#wrap main').addClass('active');
}, 1000);
}
if (textStatus == "error") {
// Error out
}
});
});
Как вы можете видеть, я запуск на всех бирке, чтобы проверить это. Этот код работает отлично по большей части. Если я перейду на первую страницу и перейду по ссылке, я успешно перейду на вторую страницу без перезагрузки браузера. URL-адрес изменяется, и история нажата. Если я затем нажмите кнопку «Назад», я тоже вернусь на первую страницу.
Проблема возникает после этого; если я затем перейду к одной и той же ссылке, я нажал первую страницу в первый раз, она проигнорирует функцию щелчка и просто загрузит вторую страницу в качестве стандартного браузера.
Я не могу понять, почему это произойдет. Я думаю, что это что-то связано с pushState, но я не могу на это наложить свой палец.
Я пропустил что-то очевидное здесь?
Благодаря
Разбито, легенда! Решила все, спасибо! – OllyF
На стороне примечание: отсрочка элементов документа не является действительно хорошей практикой, так как каждый щелчок на всей странице всегда вызывает это событие, jQuery проверяет цель события, а затем продолжает или прерывает. Таким образом, вы должны отложить до возможного закрытия родительского элемента без нарушения функциональности. Например, при загрузке только частей страницы, скажем, div-элемента с id = «pagecontent», вы можете привязать событие click только ко всем элементам '$ ('# pagecontent a')' в обратном вызове успеха вашего ajax запрос. Это было бы намного чище. – Connum