2012-03-20 25 views
3

我的問題是與此類似,但沒有一個答案解決我的問題: Use JQuery preventDefault(), but still add the path to the URLJQuery的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'); }); 

}); 

回答

8

通過更新散列location.href,瀏覽器自動導航到指針。 e.preventDefault()只會取消事件的默認行爲,但它會影響其他哈希更改方法,即使它們是從同一個事件偵聽器中調用的,也會影響而不是

您可以使用history.replaceStatehistory.pushState改變哈希不跳:

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

因此,只需要清楚,replaceState將允許我將url更改爲mysite.com#標題而不滾動到標題ID爲ID的元素? – Evans 2012-03-20 17:28:04

+1

@jdln是的。有關瀏覽器兼容性,請參閱http://caniuse.com/#feat=history – 2012-03-20 17:36:16

0

你防止login_link元素的默認處理程序燒製而成,但你專門設置window.location.hash,這將導致導航發生。你真的有一個錨點命名你在哈希中設置的東西嗎?如果沒有,你能描述它是如何打破你的網站,當它不存在時,導航到頁面上的一個錨點?通常這不會導致問題。

+0

錨點確實存在。這是我的網站導航方法的一個非常基本的演示。 「滾動」是水平的,它是一個div的位置,而不是整個文檔相對於視口的位置。我可以組成一個不涉及我的頁面元素的新片段。我不能想到實際的原因,但對我來說似乎有點混亂。 http://smartpeopletalkfast.co.uk/pos/ – Evans 2012-03-20 17:30:41