- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 HTML 历史记录 API 来操作浏览器历史记录堆栈,以在我的网站上使用 JavaScript 控制导航。我设置的更改页面的功能工作正常,但奇怪的是,当我将 pushState
添加到每个单独的页面更改时,pushState
会自动触发,以便最后一页函数中的更改始终是最后执行的更改。这意味着被推送的状态始终是最后一个页面更改语句。
JavaScript:
// Change Page Function
function ChangeContent (page) {
var pages={"homepage":{title: "homepage"},"servicespage":{title: "servicespage"},"estimatespage":{title: "estimatespage"}};
HideNav();
//Show home page
for(var homepage in pages) {
if(page!==homepage) {
document.getElementById(homepage).style.display='none';
}
else {
document.getElementById(homepage).style.display='block';
history.pushState("homepage", "Home", "home" );
window.scrollTo(0,0);
}
}
//Show services page
for(var servicespage in pages) {
if(page!==servicespage) {
document.getElementById(servicespage).style.display='none';
}
else {
document.getElementById(servicespage).style.display='block';
history.pushState( "servicespage", "Our Services", "services");
window.scrollTo(0,0);
}
}
//Show estimates page
for(var estimatespage in pages) {
if(page!==estimatespage) {
document.getElementById(estimatespage).style.display='none';
}
else {
document.getElementById(estimatespage).style.display='block';
history.pushState( "estimatespage", "Get An Estimate", "estimates");
window.scrollTo(0,0);
}
}
}
当您运行此代码时,不是每个单独的页面在单击该页面时推送其状态,而是推送的状态始终是估计页面状态。我尝试过使用 else if 语句,并且尝试将每个 for 语句嵌入到自执行函数中,希望它可以解决某种范围问题,但我没有运气。
这是我的 onPopstate
函数:
// History State Change Display
window.onpopstate = function (event) {
var state = event.state;
console.log(state);
// Change History State Display To Home Page
if (state === "homepage") {
document.getElementById("homepage").style.display = 'block';
} else {
document.getElementById("homepage").style.display = 'none';
}
// Change History State Display To Services Page
if (state === "servicespage") {
document.getElementById("servicespage").style.display = 'block';
} else {
document.getElementById("servicespage").style.display = 'none';
}
// Change History State Display To Estimates Page
if (state === "estimatespage") {
document.getElementById("estimatespage").style.display = 'block';
} else {
document.getElementById("estimatespage").style.display = 'none';
}
};
由于某种原因,我点击的每个新页面都有 URL 扩展 /estimatespage
,然后当我点击后退按钮时,它只是以与页面中写入的相反顺序循环浏览页面。页面更改功能,并正确更新URL。
我不完全确定这里的问题是什么,但我认为我正在自动推送所有页面的状态,这很奇怪,因为其余代码仅在选择正确的页面时才执行。
任何帮助将不胜感激,因为我认为这可能比我想象的更明显。
HTML
<div id="nav">
<div class="headerlist" onclick="ChangeContent('homepage');">Home</div>
<div class="headerlist" onclick="ChangeContent('servicespage');">Services</div>
<div class="headerlist" onclick="ChangeContent('estimatespage');">Estimates</div>
</div>
<div id=homepage></div>
<div id=servicespage></div>
<div id=estimatespage></div>
最佳答案
ChangeContent()
中有三个 for
循环。所有三个循环都在测试完全相同的条件——仅使用重命名的变量。
保持样式大致相同,您可以尝试这样做,请注意,这个单个循环将替换 ChangeContent()
中的所有三个循环:
for ( var p in pages ) {
if ( page !== p ) {
document.getElementById( p ).style.display = 'none';
}
else {
document.getElementById( p ).style.display = 'block';
if ( p === "homepage" )
history.pushState( "homepage", "Home", "home" );
else if ( p === "servicespage" )
history.pushState( "servicespage", "Our Services", "services");
else if ( p === "estimatespage" )
history.pushState( "estimatespage", "Get An Estimate", "estimates");
window.scrollTo( 0, 0 );
}
}
关于javascript - PushState 在不应该执行的时候执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30629787/
我有下面这个简单的 html 代码。它在我的 Chrome 和 IE11 开发环境 (Visual Studio 2010) 中按预期工作(将 ?SomeParam 附加到 url)。当我将其放入网络
我在下面有这个简单的 html 代码。它在我的 Chrome 和 IE11 开发环境 (Visual Studio 2010) 中按预期工作(将 ?SomeParam 附加到 url)。当我把它放在网
我在 JavascriptMVC 应用程序中使用 window.history 来为每个 Controller 启用后退/前进/刷新功能。每次加载新 Controller 时,我都会使用 window
假设我们有一个 这对页面的状态进行了重要的更改。 Primefaces 5.1 生成以下 HTML: Click me for state 1 Click me for state 2 在 popst
我正在使用 HTML 历史记录 API 来操作浏览器历史记录堆栈,以在我的网站上使用 JavaScript 控制导航。我设置的更改页面的功能工作正常,但奇怪的是,当我将 pushState 添加到每个
我有一个带过滤器的电子商店。当有人使用过滤器时,url 会通过 AJAX 进行更改。 我所做的是使用 .ajaxComplete 函数来检查 ajax 完成情况。在这个函数中,我有一个名为 Repla
我创建了一个 Web 应用程序,它利用 history pushState 和 replaceState 方法来浏览页面,同时更新历史记录。 脚本本身几乎可以完美运行;它将正确加载页面,并在需要抛出页
我正在研究技术:History API PushState (HTML5) 我需要用于使用 URL 重定向的命令,因为我有服务器的 CherryPy。 我无法将数据从 Cherrypy(使用 Mako
在测试场景中,我有两个页面 pageA 和 pageB。 在第一步中,一个按钮触发window.history.pushState 调用,并在地址栏中显示pageB 的地址。 第二步浏览器地址栏用于请
我有这个 URL 替换查询: window.history.pushState(null, null, window.location.search.replace(/\bcolor=[^&]*/,
我通过 stackoverflow 找到了 history.pushState() 的示例,但我不明白每件事的作用。这就是我的 var stateObj = { foo: "bar" }; h
这是代码: $.ajax({ type: "POST", url: url, xhr: function(
我试图遵循此处使用的示例:http://html5.gingerhost.com/我决定使用 jQuery 的 .load() 代替 JSON, 这是我的代码: $(function() {
我正在使用history.pushState来操作浏览器历史记录,有没有办法撤消/弹出特定的推送状态。 假设我从 google.com 转到 myPage.com。在 ajax 调用之后,我执行 Pu
所以我有这个菜单: Meet The Team What We Do See Us In Action
有谁知道确定是否可以使用 pushState 的库? 我在用这个: if(window.history.pushState){ window.history.pushState(null, d
如 GitHub's blog 所示, 他们实现了 HTML5's JavaScript pushState树浏览功能(适用于现代浏览器),带来 AJAX 导航 without Hash Bangs
我已经读过十几遍了,状态对象可以存在于多个键|值对中,并且它与新的历史条目相关联。但是有人可以给我一个状态对象的好处的例子吗?它的实际用途是什么?我无法想象为什么不直接输入 {} 最佳答案 以这个小例
我有一个简单的 React Router 配置。我有另一个基本上用 ... 包装的,它有效。但是这个没有(当然,我尝试使用不同的实现,就像 this post 和许多其他人的答案中所建议的那样。 控制
我使用 history.pushState( stateObject, title, url ) 将新条目推送到浏览器的历史堆栈。尽管有名称,第二个参数 title 并未设置浏览器历史记录中显示的条目
我是一名优秀的程序员,十分优秀!