2011-08-10 75 views
2

可能重複:
How do I stop a web page from scrolling to the top when a link is clicked that triggers javascript?href =「#」強制頁面重新定位到頂部 - 我怎樣才能阻止它?

當我點擊我的網頁上一個jQuery日期選擇器的日期,我的頁面重新定位自身的頂部,因爲在日期選擇器的日期有href="#"屬性。

似乎只要點擊href="#"<a>元素,我的頁面就會重定向,以便從頁面頂部顯示。這非常煩人,因爲用戶必須應對正在移動的頁面,甚至可能必須滾動才能看到他們點擊之前所使用的頁面部分。任何人都可以告訴我如何阻止這種情況發生?

我可以從我的一些環節採取href屬性,但jQuery的小部件往往有他們在

非常感謝

回答

9

通常,當一個環節都有href="#",這是因爲它應該做的事其他比導航(唯一的例外是「頂上」上看到一些長期的網頁...鏈接)。他們正在做的「其他事情」通常是通過JavaScript處理的,並且爲了確保它們不會繼續使用它們的默認處理程序(即導航),那麼應該使用返回false

如果你確保所有的點擊處理程序返回假,你不會再有這個問題了。

如果您使用jQuery來連接事件,您還可以在點擊處理函數的第一個參數上調用.preventDefault().stopPropagation()。這將在大多數瀏覽器上自行完成,但爲了兼容性您仍然應該返回false。

$('.someLink').click(function(ev) { 
    // do your thing 

    // Prevent the click from being handled. 
    ev.preventDefault(); 
    // Prevent the event from propagating through the DOM tree (bubbling) 
    ev.stopPropagation(); 
    // Return false, for compatibility reasons 
    return false; 
}); 

注:如果有點擊你正在使用的返回虛假一些庫處理程序,你可以隨時把它包在自己的處理函數,它。但我會考慮放棄那個圖書館...

+0

+1 - 爲了進入OP的細節,很好的答案。 – JonH

+0

+1 - 教我一兩件事! – Curt

+0

謝謝你的回答。我很欣賞這種努力。 – Joe

7

您可以通過這樣做:

<a href="#" onclick="return false;">Click me</a> 
4

這應該工作,並避免處理網址哈希:

<a href="javascript:void(0);">Click me</a> 
+0

我總是這樣做,它有什麼不對嗎? – Jashwant

0

使用事件對象的preventDefault方法可以避免這種情況,或者僅從click處理程序返回false。

$("a").click(function(e){ 
    e.preventDefault(); 
}); 
1

當使用jQuery你可以利用event.preventDefault()功能,如:

$("a").click(function(event) { 
    event.preventDefault(); 
    alert('Will not jump to top of page after alert'); 
}); 

http://api.jquery.com/event.preventDefault/

+1

建議還'返回false',以處理跨瀏覽器兼容性。此外,應該注意的是,這個事件仍然會傳播到DOM樹中的父元素,所以要真正停止所有事情,你還應該添加'event.stopPropagation()'。 (因爲'事件'是javascript中的一個關鍵字,所以最好是另外調用其他的變量 - 我通常以'ev'結尾......) –

+0

您不需要一個js庫來執行此操作-1。 – JonH

+0

@Tomas Lycken感謝您的評論Tomas我沒有意識到這一點! – Curt

0

你也可以只是沒有使用href="#"和CSS

+0

這不是一個壞的解決方案,實際上 - 爲什麼downvote? –

+0

它有缺點,鏈接不再是標籤事件的一部分,因此很難識別例如。視覺受損。 – JohnDoe

0

寫設置cursor: pointer;一些像這樣的jQuery

jQuery('a[href=#]').attr('href','javascript:void(null);');

+0

你不需要使用js庫來避免這個-1。 – JonH

+0

擺脫了-1,因爲OP使用jquery – JonH

相關問題