2010-12-08 29 views
26

當我想阻止錨標籤我真的的默認行爲使用防止錨行爲

<a href="javascript:void(0);">link</a> 

這是最有效的解決方案?

回答

19

一個優雅有辱人格的解決方案的例子:

<a href="no-script.html" id="myLink">link</a> 

<script> 
document.getElementById("myLink").onclick = function() { 
    // do things, and then 
    return false; 
}; 
</script> 

演示:http://jsfiddle.net/karim79/PkgWL/1/

+0

如果* do things *中出現錯誤,或者用戶在分配偵聽器之前單擊該鏈接,這也會使用戶進入無腳本頁面。如果你真的打算讓它們在DOM中緊跟在一起,那麼後者不太可能發生,就像在你的例子中那樣,但是這會抑制頁面渲染速度,並且破壞驗證(除非在HTML5規範中這被改變了?我不介意這是否是!)通常情況下,這些東西都是在DOMReady中最快分配的,這在某些情況下會爲用戶留下一個相當大的窗口來點擊鏈接。 – 2010-12-08 13:04:31

10

你也可以有這樣的:

<a href="#" onclick="return false;">link</a> 
23

這是一個很好的方法,如果你使用jQuery,你也可以這樣做:

<a id="link" href="javascript:void(0)">link</a> 

<script type="text/javascript"> 
    $("#link").click(function(ev) { 
     ev.preventDefault(); 
    }); 
</script> 

的preventDefault可能是有用的還可以防止提交表單

9

如果你不希望瀏覽器跟隨任何地方的鏈接,我會說你得到的是最簡單,最安全的解決方案。

當然,也有其他的解決方案的堆,你可以使用JavaScript的應用,但是當

  • DOM是不完全加載,如果該事件被分配在domready中或更高版本,這是大多數其他方式可能會失敗,共同。
  • 點擊事件偵聽器處理鏈接(這是常見的地方,你希望鏈接不被瀏覽器所遵循)。如果在處理點擊的javascript中發生錯誤,則可能在語句末尾的return false;preventDefault將不會執行,並且瀏覽器將跟隨該鏈接(如果僅限於#)。
1

這是非常簡單的方法來阻止這一切。

(function($) { 
    $('a[href="#"]').click(function(e) { 
     e.preventDefault(); 
    }); 
})(jQuery);