以下這種寫法,onclick 事件先執行, href 屬性下的動作后執行(頁面跳轉或 javascript 偽鏈接),如果不想執行 href 屬性下的動作,onclick 需要返回 false。
<a href="https://www.baidu.com/" onclick="doSomething()">鏈接</a>
這種寫法我在寫側邊導航欄的時候用到了,就是點擊事件和頁面跳轉事件同時存在,可能頁面跳轉事件處理並沒有覆蓋掉點擊事件的處理程序,所以暫時沒有出現什么問題,但總感覺怪怪的,以后發現問題的話再補充吧……
如果實際應用中,確實需要 a 標簽來響應 onclick 事件的,且不想執行 href 屬性下的動作,推薦以下3種寫法:
1、 javascript:void(0) 相當於一個死鏈接,href 不執行
<a href="javascript:void(0)" onclick="doSomething()">鏈接</a>
2、onclick 返回 false,href 不執行
<a href="https://www.baidu.com/" onclick="doSomething();return false;">鏈接</a>
3、onclick 返回 false,href 不執行
<a href="https://www.baidu.com/" onclick="doSomething();event.returnValue=false;">鏈接</a>
以下這種寫法也可以用,但不推薦
<a href="javascript:open()">鏈接</a>
不推薦原因:盡量不要使用 javascript: 協議作為 a 的 href 屬性,這樣會導致不必要的觸發 window.onbeforeunload 事件,在IE下還會使 gif 動畫圖片停止播放。
再嚴重一點,可能會有人這么寫
<a href="javascript:open()" onclick="doSomething()">鏈接</a>
不推薦原因:我在想,如果這兩個事件里處理的東西沒有重疊,不會互相覆蓋的話,那這么寫可不可以?有待考證