我正在尝试创建一个网页,在单击导航链接时替换主 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");
}
});