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

时间:2012-03-20 17:22:43

标签: jquery fragment-identifier preventdefault

我的问题与此类似,但没有一个答案可以解决我的问题: Use JQuery preventDefault(), but still add the path to the URL

当用户点击片段链接时,我需要删除跳转到片段的默认行为,但仍然将片段添加到URL。此代码(取自链接)将触发动画,然后将片段添加到URL。然而,片段然后导航到,我的情况下我的网站。

$("#login_link").click(function (e) {
    e.preventDefault();
    $("#login").animate({ 'margin-top': 0 }, 600, 'linear', function(){  window.location.hash =     $(this).attr('href'); });

});

2 个答案:

答案 0 :(得分:8)

通过location.href更新哈希,浏览器会自动导航到指针。 e.preventDefault()仅取消事件的默认行为,影响其他哈希更改方法,即使它们是从同一事件侦听器中调用的。

您可以使用history.replaceStatehistory.pushState更改哈希值而不跳转:

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

答案 1 :(得分:0)

您阻止login_link元素的默认处理程序触发,但您专门设置window.location.hash,这将导致导航发生。你真的有一个名为你在哈希中设置的东西的锚吗?如果没有,你能描述一下当你的网站不存在时,它如何破坏你的网站以“导航”到页面上的一个锚点?通常这不会导致问题。