比較href=”#” 和href=”javascript:void(0);”

來源:互聯網
上載者:User

阻止跳轉常見的有下面四種方式:

1. <a href="javascript:;" onclick="action();">link</a> 

2. <a href="javascript:void(0);" onclick="action();">link</a> 

3. <a href="###" onclick="action();">link</a> 

4. <a href="#" onclick="action();return false;">link</a>  

 

事實上這四種方式都可以很正常的工作。

第1和第2中可以歸為一類,使用javascript 偽協議,只要什麼都不返回,那麼瀏覽器將不會跳轉

第3種比較有意思,它使用了一個錨點(跳轉到id或name為##的位置),在瀏覽器中, 如果一個錨點不存在,那麼也不會跳轉

第4種是在執行onclick的最後處加上return false, 這樣就阻止了瀏覽器執行預設行為,同樣就阻止了跳轉

 

我以往的經驗都證明第4種是最穩妥的方式,因為第2種都會在ie6下出現bug:

當A被點擊, action() 函數裡如果有設定location,設定img.src,設定iframe.src 行為,從而導致一個新的資源下載時,ie6會中斷掉該行為。

 

第三種真的穩妥麼,或許我們可以猜測一下錨點的工作方式,

當<a>元素被點擊,瀏覽器發現href="###" ,首先要判斷這個href是否需要跳轉到別的頁面,如果不需要,那麼瀏覽器會將href後面兩個##取出來,然後遍曆DOM樹,找到第一個id(或者name)的值為##的,調用內部方法,使瀏覽器滾動到相應的位置 ,如果一個匹配的也沒有找到,那麼瀏覽器什麼也不做。

而這個過程中, 瀏覽器需要做的事情可能還有

- 啟動載入中提示

- 發出跳轉提示音(ie6,ie7) 

 

總之,###會導致瀏覽器執行一系列的預設行為(是否有效能問題?), 包括ie6 7非常討厭的提示音,而只要我們阻止了預設行為,這一切都不會發生。

 

所以結論是,盡量不要使用href="javascript:;" href="###" ,而統一使用 onclick="return false;" ,這是安全的,也是體驗最好的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.