1. 程式人生 > >a標籤的 onclick 和 href 哪個先執行?

a標籤的 onclick 和 href 哪個先執行?

 以下這種寫法,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>

不推薦原因:我在想,如果這兩個事件裡處理的東西沒有重疊,不會互相覆蓋的話,那這麼寫可不可以?有待考證