我的问题与此类似,但没有一个答案能解决我的问题:使用JQuery preventDefault(),但仍然添加URL 的路径
当用户单击片段链接时,我需要删除跳到片段的默认行为,但仍然将片段添加到URL中。此代码(取自链接)将激发动画,然后将片段添加到URL中。然而,片段随后被导航到,在我的情况下,它破坏了我的网站。
$("#login_link").click(function (e) {
e.preventDefault();
$("#login").animate({ 'margin-top': 0 }, 600, 'linear', function(){ window.location.hash = $(this).attr('href'); });
});
通过location.href
更新哈希,浏览器会自动导航到指针。e.preventDefault()
仅取消事件的默认行为,它不会影响其他哈希更改方法,即使它们是从同一事件侦听器中调用的。
您可以使用history.replaceState
或history.pushState
来更改哈希,而无需跳转:
// Replaces the current history entry
history.replaceState(null, '', '#newhash');
您正在阻止login_link
元素的默认处理程序启动,但您专门设置了window.location.hash
,这将导致导航发生。你真的有一个名为你在哈希中设置的东西的锚吗?如果没有,你能描述一下当你的网站不存在时,它是如何破坏你的网站来"导航"到页面上的锚吗?通常情况下,这不会造成问题。