【发布时间】:2017-07-09 10:43:49
【问题描述】:
您好,我正在建立这个网站:http://www.freiheitmedia.com/en/。它是使用 Themify Ultra 主题构建的。
我的目标是在滚动或点击链接时去掉 url 中的#something 部分。
我需要用 JavaScript/jQuery 来做,因为没有基于主题的解决方案,支持人员也帮不了我。
我已经测试过,知道下面的代码可以随意替换url:
history.replaceState("",document.title,window.location.pathname + window.location.search);
现在,问题是 我似乎无法触发“hashchange”事件。我将以下代码放在页脚中,但在这两种情况下都没有达到警报语句:
<script>
window.addEventListener("hashchange", function(e){
alert("hiii");
});
</script>
或
<script>
window.addEventListener("hashchange", function(e){
alert("hiii");
}, false);
</script>
我怀疑主题设置可能会阻止 hashchange 事件,但这只是猜测。
你们知道为什么“hashchange”没有触发吗?
【问题讨论】:
-
有点不清楚你在问什么。当您在第一个代码块中运行代码时,您是否期望看到
hashchange事件? (您不会,hashchange不会被history.replaceState解雇。)或者您是否尝试通过触发第一个块中的代码来响应哈希更改? -
FWIW,您的代码挂钩事件(第二个和第三个块)是正确的(对于符合标准的浏览器 - 因此,不是 IE8 或更早版本,如果它们处于“兼容性”中,则不是 IE9+模式”)。
-
@tjcrowder 当您访问该站点并向下滚动时,您会看到 url 会根据您所在的部分而变化。特别是 #part 会发生变化。我的目标是防止这种行为,并始终拥有一个干净的 url(没有任何#hashes)。所以我尝试通过监听“hashchange”事件来访问这种行为。但由于某种原因,当 url 更改为 #part 时,“hashchange”事件不会触发。这可以理解吗?
标签: javascript jquery wordpress hashchange