再舉幾個可能發生的不同事件:
1.混用HTML 和JavaScript,這樣文檔很難解析,也不便後期維護。
2.即使在單一文件中,內置事件處理器也不是一個好主意。例如 : 一個按鈕看起來還好,但是如果有一百個按鈕呢?您得在文件中加上100個屬性。這很快就會成為開發人員的噩夢。
行內事件處理器寫法,例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button onclick="alert('Hello JS')">click me</button>
<button onclick="showAlert()">click me</button>
<script src="all.js"></script>
</body>
</html>
JS代碼編寫如下:
function showAlert(){
alert("hi JS function!");
}
點擊按鈕 → 觸發事件 → 捕獲事件 → 處理事件(處理click事件)
優點 : 程式更為精簡,對於後期也較好維護。
缺點 : 一個元素只能有一個事件處理程序,若一個元素有兩個以上事件處理程序,則會被後者覆蓋。
HTML代碼編寫如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="clickMe">click me</button>
<script src="all.js"></script>
</body>
</html>
JS代碼編寫如下:
function clickAlert() {
alert('hello JS');
}
function secondClickAlert() {
alert('hello second JS');
}
let btn = document.getElementById('clickMe');
btn.onclick = clickAlert;
btn.onclick = secondClickAlert; //會把上面的clickAlert覆蓋
透過addEventListener() 和removeEventListener()定義
裡面放兩個參數,第1個參數是告訴addEventListener要監聽甚麼事件,第2個參數是執行處理事件的函式
裡面放兩個參數,第1個參數是告訴addEventListener要刪除哪一事件,第2個參數則是哪一處理事件的函式要刪除
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="clickMe">click me</button>
<script src="all.js"></script>
</body>
</html>
JS代碼編寫如下:
function clickAlert() {
alert('hello JS');
console.log(event);//可以顯示click事件所有的屬性,每個事件都有對應的event object方便程式利用這些屬性作進一步處理
}
function secondClickAlert() {
alert('hello second JS');
}
let btn = document.getElementById('clickMe');
btn.addEventListener('click', clickAlert);
btn.addEventListener('click', secondClickAlert);
btn.removeEventListener('click',secondClickAlert); //因為此行代碼導致secondClickAlert()被刪除