在 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
事件。