JQuery preventDefault(),但仍将片段路径添加到URL,而不导航到片段

JQuery preventDefault(),但仍将片段路径添加到URL,而不导航到片段,jquery,fragment-identifier,preventdefault,Jquery,Fragment Identifier,Preventdefault,我的问题与此类似,但没有一个答案能解决我的问题: 当用户单击片段链接时,我需要删除跳转到片段的默认行为,但仍然将片段添加到URL。这段代码(取自链接)将触发动画,然后将片段添加到URL。然而,该片段随后被导航到,我的案例打破了我的网站 $("#login_link").click(function (e) { e.preventDefault(); $("#login").animate({ 'margin-top': 0 }, 600, 'linear', function(

我的问题与此类似,但没有一个答案能解决我的问题:

当用户单击片段链接时,我需要删除跳转到片段的默认行为,但仍然将片段添加到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.pushState
更改哈希而不跳转:

// Replaces the current history entry
history.replaceState(null, '', '#newhash');

您正在阻止触发
login\u链接
元素的默认处理程序,但您正在专门设置
window.location.hash
,这将导致出现导航。你真的在散列中设置了一个锚吗?如果没有,你能描述一下当你的网站不存在时,它是如何破坏你的网站来“导航”到网页上的锚的?通常这不会导致问题。

因此,为了清楚起见,replaceState允许我将url更改为mysite.com#title,而无需滚动到ID为title的元素?锚确实存在。这是一个非常基本的演示我的网站的导航方法。“滚动”是水平的,它是div的位置,而不是相对于视口的整个文档。我可以创建一个与我的页面元素无关的新片段。我想不出一个实际的理由,但对我来说似乎有点混乱。