Я пытаюсь создать одну веб-страницу, которая заменяет содержимое основного div при нажатии на навигационные ссылки. Мне удалось реализовать функцию pushstate, чтобы заменить содержимое div и довольно легко изменить URL-адрес. Я также могу обновить содержимое при нажатии кнопок «назад/вперед» с помощью функции popstate. Однако теперь я нажимаю первую ссылку, и она работает нормально, я нажимаю следующую ссылку, и она, кажется, применяет 2 состояния нажатия, 3-й щелчок применяет 3 состояния нажатия и т. д. Кажется, что где-то происходит цикл нажатия, но не уверен, где он является. Я ищу несколько советов о том, как устранить множественные pushstates, чтобы они не дублировались в моей истории.
HTML-код:
<nav id="headerNav">
<ul>
<li><button class="navButton" id="signIn" href="./content/signIn.php" name="reply" title="SignIn">Sign In</button></li>
<li><button class="navButton" id="signUp" href="./content/registration.php" name="registration" title="Registration">Sign Up</button></li>
<li><button class="navButton" id="about" href="./content/about.php" name="settings" title="About">About</button></li>
</ul>
</nav>
<section id="mainContent">
<!-- CONTENT PAGES REPLACE HERE -->
<?php
include ('./content/start.php');
?>
</section>
Javascript
$(document).ready(function() {
if (window.history && history.pushState) {
$(".navButton").click(function(e) {
e.preventDefault();
$("#mainContent").fadeOut().load($(this).attr("href")).fadeIn();
history.pushState(null, $(this).attr("title"), $(this).attr("name"));
});
}
});
window.addEventListener('popstate', function() {
//WHEN BACK/FORWARD CLICKED CHECKS URL PATHNAME TO DETERMINE WHICH CONTENT TO PLACE IN DIV
if (location.pathname == "/index.php") {
$("#mainContent").load("./content/start.php");
} else {
$("#mainContent").load("./content" + location.pathname + ".php");
}
});