2010-01-07 129 views
26

可能重複使用時,頂部:
How do I stop a web page from scrolling to the top when a link is clicked that triggers javascript?與HREF = 「#」 滾動頁面鏈接使用jQuery的slideToggle

我使用jQuery的的slideToggle顯示/隱藏的div。 控制滑動的元素是文本鏈接(< \ a>中的一些文本),它具有href =「#」,因此它看起來像鏈接(下劃線,光標更改)。

問題是,當鏈接被點擊時,除了滑動效果,頁面滾動到頂部爲 。

我試着用href =「」替換href =「#」,但是禁用了div顯示/隱藏效果。 我想我可以添加到標籤名稱=「somename」,然後將href設置爲href =「#somename」 但我寧願不使用這樣的技巧。

爲什麼href =「#」將頁面滾動到頂端?

任何想法,將不勝感激

回答

70

有幾個選項:

  1. return false;在您單擊處理程序的底部,並在href不會被執行。
  2. 將href更改爲javascript:void(0);
  3. 呼叫preventDefault在事件處理函數中:

    function(e) { 
        e.preventDefault(); 
        // your event handling code 
    } 
    
+3

謝謝大家的回答。 我使用了返回false,它完美地工作 stackoverflow是驚人的! – samoyed 2010-01-08 10:22:42

+0

優秀的解決方案thenduks,爲我節省了很多麻煩=) – 2010-11-12 09:38:44

+4

'return false;'不是正確的處理方法。因此,開發者往往懶懶地在事件處理程序結束時拋出「返回false」,而不理解此行爲的後果。沒有理由阻止事件的傳播。您所需要做的就是防止用戶代理的默認操作。因此,'preventDefault()'是在這裏使用的正確函數。 – 2012-11-21 15:09:20

5

您需要添加return false;您單擊處理程序。
這將阻止瀏覽器執行點擊的默認操作。

+0

是的,做了這項工作。 – 2010-11-12 09:37:54

1

別人給予你的解決方案。但要專門回答你的問題,#指的是當前頁面。由於標籤的解釋是將頂端的標籤顯示在視圖中,因此單擊#標籤可將您滾動到當前頁面的頂部。

1

return falseevent.preventDefault()你在點擊事件處理程序,以防止發生默認操作所需要的。一個<a>元素與href#將導致瀏覽器視口跳轉到頁面的頂部作爲默認動作