
在 HTML 標籤寫入 onclick() 事件
在 addEventListener 的寫法出現前,是在 HTML 的標籤內直接寫入事件,假如要寫入一個 click 事件,會這樣寫:
1  | <input type="button" onclick="clickBtn()" class="button" value="CLICK">  | 
就像在 input 標籤上直接加入一個 function,再透過 JS 把這個 function 內容寫出來:
1  | function clickBtn() {  | 
點擊 button 的時候,就會出現彈跳視窗。
CodePen: https://codepen.io/hnzxewqw/pen/xxGgmXV
不過這是比較舊的寫法,至今還有人這樣寫,也沒什麼不對,那現在前端為了避免 XSS 攻擊事件,所以都盡量不在 HTML 標籤上寫上 script 相關標籤,以免被埋入程式碼。
關於 XSS 攻擊事件
addEventListener 的寫法
比較新的新增事件的寫法如下:
1  | <input type="button" value="CLICK" class="button">  | 
對比之下,少了 onclick 這個事件在標籤上,但使用選取器 querySelector 的方式,變成下方程式碼寫法:
1  | var button = document.querySelector(".button");  | 
所呈現出來的結果是相同的。
CodePen: https://codepen.io/hnzxewqw/pen/OJVWrQE
監聽事件 addEventListener
這邊使用一個按鈕,在點擊時會產生監聽事件:
1  | <input type="button" value="CLICK" class="button">  | 
要在 button 上新增一個監聽事件時,JS 的起手式是這樣:
1  | var el = document.querySelector(".button");  | 
說明:
在選取的元素中新增事件時,後面的參數是要這樣寫,
選擇要出現的事件,事件有很多種,不只是
click,可能還有hover也是,但click滿常使用的。中間為匿名 function,帶入要出現的功能。
布林值,決定要不要產生冒泡事件,如果不指定,會自動產生冒泡事件。
- false (冒泡事件 Event Bubbling): 從指定的元素往外找 (預設為 false)
 - true (捕獲事件 Event Capturing): 從最外層找到指定元素
 
onclick 與 addEventListener 的差別
onclick無法綁定兩個事件addEventListener可以綁定多個事件
用程式碼來舉例,下面有兩個按鈕,分別為 btnA 跟 btnB,HTML 如下:
1  | <input type="button" value="btnA" class="btnA">  | 
這邊兩個監聽事件都做兩個 alert 來測試效果,
1  | // onclick 效果  | 
透過 CodePen 測試可以看到,onclick 只能讀取到第二個 alert 事件,無法綁定多個,而 addEventListener 可以綁定多個 alert 事件。