Я использую этот код для моей основной навигации по сайту, которая загружает каждую страницу через ajax и имеет резерв.jquery ajax navigation in ajax navigation
$(function() {
var newHash = '',
$contentWrap = $("#content-wrap");
$("nav").on("click", "a", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
newHash = window.location.hash.substring(1);
$contentWrap.load(newHash + " #content");
});
$(window).trigger('hashchange');
});
это работает нормально, но когда я загрузить в содержимое другой страницы, например about.html я также загружаются в некоторых более кнопок для навигации # содержимого обертке.
поэтому # content-wrap теперь содержит поле данных и еще несколько кнопок для навигации. когда я нажимаю на новую навигацию, ему нужно загрузить новые данные в поле данных.
Сначала я пробовал просто копировать сценарий выше, но с новыми якорями, однако у меня конфликт.
i figure Мне нужно какое-то утверждение if, я просмотрел что-то вроде if (function! == undefined), но не могу понять, что делать.
Я не уверен, насколько хорошо я себя объяснил, я смущен, объясняя это, но в основном я хочу совместить код выше с тем же кодом ниже, без конфликта.
$(function() {
var newHash = '',
$contentWrap = $("#content-wrap"),
$aboutWrap = $("#a-wrap");
$("#content-wrap").on("click", "a", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
newHash = window.location.hash.substring(1);
$aboutWrap.load(newHash + " #a-content");
});
$(window).trigger('hashchange');
});
Обновление: вид работ немного, но изменил мой план
$(function() {
var newHash = '',
$nav = $("nav a"),
$boxBtn = '',
$aboutWrap = '',
$contentWrap = $("#content-wrap");
$("nav").on("click", "a", function() {
$(this).addClass("nav-click");
window.location.hash = $(this).attr("href");
return false;
});
$contentWrap.on("click", "a", function() {
$(this).addClass("btn-click");
window.location.hash = $(this).attr("href");
return false;
});
$(window).on('hashchange', function() {
var $aboutWrap = $("#a-wrap"),
$boxBtn = $("div.btn a");
newHash = window.location.hash.substring(1);
if ($nav.hasClass("nav-click")){
$contentWrap.load(newHash + " #content");
$nav.removeClass("nav-click");
};
if ($boxBtn.hasClass("btn-click")){
$aboutWrap.load(newHash + " #a-content");
$boxBtn.removeClass("btn-click");
};
});
$(window).trigger('hashchange');
}); /*/end*/
привет, спасибо за ответ. Я знаю, что иногда может быть проблемой, но я не думаю, что это так. Я думаю, что '$ (window) .on (' hashchange ', function() {', вызываемый дважды, является проблемой, но я не знаю, как разместить оператор if, чтобы предотвратить это. – thom
О да, я вижу, событие вручную, а также вручную изменить хэш. Но вы также можете установить переменную, когда вы меняете хэш по ссылке, а затем проверяете эту переменную внутри функции. Если это ложь, вы знаете, что она не была проверена изнутри обработчик clickevent – Opi
привет, да, у меня была игра с этой идеей, я вышел на сцену, где она работает (опубликовано выше), но кнопка «Назад» не работает, поскольку теперь я только загружаю контент в оператор if, поэтому возвращаюсь назад больше работы. У меня действительно нет времени, поэтому каждый раз просто загружаю весь основной контент, а также делает его более простым для резервного копирования, если он очень неэффективен. – thom