ie6 javascript:void(0);

遇到過幾回這種問題,如今總結一下。

代碼:

<a onclick="window.location.href='http://www.google.com'" href="javascript:void(0);">google</a>
這段代碼在主流的瀏覽器裏面都沒問題,可是在IE6下就會出現不能跳轉的現象。

通過一翻排查,發現綁定的事件都會執行,是因爲DOM自己的冒泡事件因此會最後執行href屬性內的javascript:void(0);致使的。

a標籤

a標籤原本就是用來進行頁面跳轉的標籤,其運行機制是告訴瀏覽器URL地址而且跳轉。固然,咱們能夠在href屬中直接執行javascript。

代碼:

<a href="javascript:alert('Hello!');">Say Hello</a>
Say Hello


這裏因爲javascript執行了alert函數,可是其返回的是null。因此a標籤沒有執行任何動做。

javascript:void(0);

void(arg);能夠理解爲永遠返回null的函數,可是其參數不能爲空。其參數能夠爲任意的表達式甚至是函數。

代碼:

<a href="javascript:void(name = 'will'); alert('Hello ' + name);">Say Hello</a>
Say Hello


對IE6運行的猜測

IE6會先運行DOM自己綁定的事件,如onclick;若是沒有阻止冒泡,則會順序執行href屬性。而void(0);正是不須要執行任何事件,則IE6告訴瀏覽器不執行任何事件(覆蓋以前的動做),而且終止冒泡至關於return false;因而瀏覽器沒有執行任何動做。

這樣只要在onclick事件內阻止冒泡事件便可。

通過改進的代碼爲:

<a onclick="window.location.href='http://www.google.com' return false;" href="javascript:void(0);">google</a>
這樣在IE6下就能夠正常運行了。

其餘方法

固然能夠不使用javascript:void(0);而改使用#也能夠避免,href屬性內的#原本的意思就是錨點#name因此當不指定任何錨時天然會到頁面頂端並在URL後加入Hash symbol。

這裏對於錨還有一個比較特殊的用法

當href屬性的值是錨點時,可是又找不到該錨點,則至關於返回null,因此可使用##來代替javascript:void(0);

固然前提是你的頁面不要有錨點的名字是#的喲~
 
### 和## 有什麼區別?
按href屬性的#解釋,##應該是去尋找<a name='#'></a>的錨點,###應該是去尋找<a name='##'></a>的錨點,可是name屬性應該是以[A-Za-z]字母開頭而且具備惟一性的標識。因此這應該僅僅只是一種hack寫法,應該沒什麼區別。以上是個人理解 :)
相關文章
相關標籤/搜索