Pengendalian Acara dalam JavaScript
Artikel ini menerangkan pengendalian acara dalam JavaScript.
YouTube Video
javascript-html-event.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>JavaScript & HTML</title>
6 <style>
7 * {
8 box-sizing: border-box;
9 }
10
11 body {
12 margin: 0;
13 padding: 1em;
14 padding-bottom: 10em;
15 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
16 background-color: #f7f9fc;
17 color: #333;
18 line-height: 1.6;
19 }
20
21 .container {
22 max-width: 800px;
23 margin: 0 auto;
24 padding: 1em;
25 background-color: #ffffff;
26 border: 1px solid #ccc;
27 border-radius: 10px;
28 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
29 }
30
31 .container-flex {
32 display: flex;
33 flex-wrap: wrap;
34 gap: 2em;
35 max-width: 1000px;
36 margin: 0 auto;
37 padding: 1em;
38 background-color: #ffffff;
39 border: 1px solid #ccc;
40 border-radius: 10px;
41 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
42 }
43
44 .left-column, .right-column {
45 flex: 1 1 200px;
46 min-width: 200px;
47 }
48
49 h1, h2 {
50 font-size: 1.2rem;
51 color: #007bff;
52 margin-top: 0.5em;
53 margin-bottom: 0.5em;
54 border-left: 5px solid #007bff;
55 padding-left: 0.6em;
56 background-color: #e9f2ff;
57 }
58
59 button {
60 display: block;
61 margin: 1em auto;
62 padding: 0.75em 1.5em;
63 font-size: 1rem;
64 background-color: #007bff;
65 color: white;
66 border: none;
67 border-radius: 6px;
68 cursor: pointer;
69 transition: background-color 0.3s ease;
70 }
71
72 button:hover {
73 background-color: #0056b3;
74 }
75
76 #output {
77 margin-top: 1em;
78 background-color: #1e1e1e;
79 color: #0f0;
80 padding: 1em;
81 border-radius: 8px;
82 min-height: 200px;
83 font-family: Consolas, monospace;
84 font-size: 0.95rem;
85 overflow-y: auto;
86 white-space: pre-wrap;
87 }
88
89 .highlight {
90 outline: 3px solid #ffc107; /* yellow border */
91 background-color: #fff8e1; /* soft yellow background */
92 transition: background-color 0.3s ease, outline 0.3s ease;
93 }
94
95 .active {
96 background-color: #28a745; /* green background */
97 color: #fff;
98 box-shadow: 0 0 10px rgba(40, 167, 69, 0.5);
99 transition: background-color 0.3s ease, box-shadow 0.3s ease;
100 }
101 </style>
102</head>
103<body>
104 <div class="container-flex">
105 <div class="left-column">
106 <h2>HTML Sample</h2>
107 <div id="parentDiv">
108 <button id="myButton">Click me</button>
109 </div>
110 </div>
111
112 <div class="right-column">
113 <h2>Form Sample</h2>
114 <form id="myForm">
115 <input type="text" name="username">
116 <button type="submit">Submit</button>
117 </form>
118 </div>
119 </div>
120
121 <div class="container">
122 <h1>JavaScript Console</h1>
123 <button id="executeBtn">Execute</button>
124 <div id="output"></div>
125 </div>
126
127 <script>
128 // Override console.log to display messages in the #output element
129 (function () {
130 const originalLog = console.log;
131 console.log = function (...args) {
132 originalLog.apply(console, args);
133 const output = document.getElementById('output');
134 output.textContent += args.map(String).join(' ') + '\n';
135 };
136 })();
137
138 document.getElementById('executeBtn').addEventListener('click', () => {
139 // Prevent multiple loads
140 if (document.getElementById('externalScript')) return;
141
142 const script = document.createElement('script');
143 script.src = 'javascript-html-event.js';
144 script.id = 'externalScript';
145 //script.onload = () => console.log('javascript-html-event.js loaded and executed.');
146 //script.onerror = () => console.log('Failed to load javascript-html-event.js.');
147 document.body.appendChild(script);
148 });
149 </script>
150</body>
151</html>
Pengendalian Acara dalam JavaScript
Pengendalian acara dalam JavaScript adalah satu mekanisme untuk melaksanakan tindakan tertentu sebagai tindak balas kepada operasi pengguna (seperti klik dan input papan kekunci) atau tindakan pelayar. Dengan menetapkan pendengar acara, anda boleh mencipta laman web yang dinamik dan interaktif.
Asas-asas Acara
Acara berlaku sebagai tindak balas kepada operasi pengguna dan tindakan pelayar. Apabila acara berlaku, pengendali acara yang berkaitan (fungsi) akan dilaksanakan. Sebagai contoh, terdapat acara seperti berikut:.
- Klik (
click
) - Input Papan Kekunci (
keydown
,keyup
) - Pergerakan Tetikus (
mousemove
,mouseover
) - Penghantaran Borang (
submit
) - Halaman Selesai Dimuatkan (
DOMContentLoaded
) - Tatal (
scroll
)
Menambah Pendengar Acara
Pendengar acara ditetapkan menggunakan kaedah addEventListener()
. Kaedah ini memanggil fungsi tertentu apabila acara yang ditentukan berlaku.
Sintaks Asas addEventListener()
1element.addEventListener(event, handler);
element
ialah elemen HTML yang memantau peristiwa tersebut.event
ialah nama peristiwa (contohnya,click
).handler
ialah fungsi yang akan dilaksanakan apabila peristiwa tersebut berlaku.
Objek Acara
Apabila sesuatu acara berlaku, JavaScript akan menghantar objek acara yang mengandungi butiran acara kepada pengendali acara. Objek ini mengandungi maklumat seperti elemen mana yang mencetuskan acara dan kekunci mana yang ditekan.
Contoh: Menggunakan Objek Acara
1<button id="myButton">Click me</button>
1const button = document.getElementById('myButton');
2
3button.addEventListener('click', (event) => {
4 console.log(event); // Display event details in the console
5 console.log('Clicked element:', event.target); // Display the clicked element
6});
- Kod ini menggunakan objek peristiwa untuk memaparkan maklumat terperinci dan elemen yang diklik di konsol apabila butang ditekan.
Acara Tipikal
Acara Klik
Acara click
berlaku apabila pengguna mengklik pada elemen.
1element.addEventListener('click', () => {
2 console.log('Clicked');
3});
- Kod ini memaparkan mesej di konsol apabila elemen diklik.
Acara Papan Kekunci
Acara keydown
dan keyup
berlaku apabila pengguna menekan atau melepaskan kekunci. Anda boleh menggunakan event.key
untuk melihat kekunci mana yang ditekan.
1document.addEventListener('keydown', (event) => {
2 console.log(`Key pressed: ${event.key}`);
3});
- Kod ini memaparkan nama kekunci di konsol apabila pengguna menekan sesuatu kekunci.
Acara Tetikus
Acara mousemove
dan mouseover
berlaku pada pergerakan tetikus dan apabila melayang.
1document.addEventListener('mousemove', (event) => {
2 console.log(`Mouse position: X=${event.clientX}, Y=${event.clientY}`);
3});
- Kod ini memaparkan kedudukan (koordinat X dan Y) di konsol setiap kali tetikus digerakkan.
Acara Borang
Acara yang berkaitan dengan borang termasuk submit
dan input
. Acara submit
berlaku apabila borang dihantar dan biasanya menyebabkan halaman dimuat semula, namun event.preventDefault()
sering digunakan untuk mengelakkannya.
Contoh: Mengelakkan pemuatan semula halaman pada penghantaran borang
1<form id="myForm">
2 <input type="text" name="username">
3 <button type="submit">Submit</button>
4</form>
1const form = document.getElementById('myForm');
2
3form.addEventListener('submit', (event) => {
4 event.preventDefault(); // Prevent page reload
5 console.log('Form has been submitted');
6});
- Kod ini menghalang halaman daripada dimuat semula apabila borang dihantar dan memaparkan mesej di konsol sebagai ganti.
Perambatan Acara (Bubbling dan Capturing)
Acara merebak melalui dua peringkat: fasa capturing, yang bergerak dari elemen induk ke elemen anak, dan fasa bubbling, yang bergerak dari elemen anak ke elemen induk.
Bubbling Acara
Secara lalai, acara berlaku pada elemen yang paling dalam dan merebak ke luar. Ini dipanggil bubbling.
Contoh: Contoh Bubbling
1<div id="parentDiv">
2 <button id="myButton">Click me</button>
3</div>
1const parent = document.getElementById('parentDiv');
2const button = document.getElementById('myButton');
3
4parent.addEventListener('click', () => {
5 console.log('Parent element was clicked');
6});
7
8button.addEventListener('click', () => {
9 console.log('Button was clicked');
10});
- Dalam contoh ini, apabila anda mengklik butang, acara butang berlaku dahulu, diikuti acara elemen induk.
Capturing Acara
Dengan menyatakan true
sebagai argumen ketiga dalam addEventListener()
, anda boleh mengendalikan acara dalam fasa capturing.
1parent.addEventListener('click', () => {
2 console.log('Capturing: Parent element was clicked');
3}, true);
- Kod ini mengendalikan peristiwa klik pada elemen induk dalam fasa penangkapan dan memaparkan mesej di konsol.
Mengelakkan Perambatan dengan stopPropagation()
Anda boleh menghentikan peristiwa daripada merebak menggunakan event.stopPropagation()
.
1button.addEventListener('click', (event) => {
2 event.stopPropagation(); // Stop the event propagation
3 console.log('Button was clicked (no propagation)');
4});
- Kod ini menghalang peristiwa daripada tersebar apabila butang diklik dan memaparkan mesej di konsol.
Menghapuskan Peristiwa
Anda boleh menghapuskan pendengar peristiwa menggunakan removeEventListener()
. Untuk menghapuskan pendengar peristiwa, anda memerlukan rujukan kepada fungsi yang ditentukan dalam addEventListener()
.
1function handleClick() {
2 console.log('Clicked');
3}
4
5const button = document.getElementById('myButton');
6button.addEventListener('click', handleClick);
7button.removeEventListener('click', handleClick); // Remove the event listener
- Kod ini membuang pendengar acara klik pada butang supaya ia tidak lagi dikendalikan apabila diklik.
Peristiwa Tersuai
Dalam JavaScript, anda boleh mencipta dan mencetuskan peristiwa tersuai selain peristiwa standard. Gunakan pembina CustomEvent
.
1document.addEventListener('myCustomEvent', (event) => {
2 console.log(event.detail.message); // Displays "Hello!"
3});
4
5const event = new CustomEvent('myCustomEvent', {
6 detail: {
7 message: 'Hello!'
8 }
9});
10document.dispatchEvent(event);
- Kod ini mencipta dan menghantar acara tersuai
myCustomEvent
, dan memaparkan maklumatnya di konsol.
Ringkasan
Pengendalian acara ialah elemen penting untuk meningkatkan interaktiviti aplikasi web. Dengan memanfaatkan komponen pengendalian acara, anda boleh menyediakan pengalaman pengguna yang lebih fleksibel dan canggih.
- Pendengar Peristiwa: Gunakan
addEventListener()
untuk menetapkan pengendali peristiwa pada elemen. - Objek Peristiwa: Apabila satu peristiwa berlaku, satu objek peristiwa akan diteruskan yang boleh digunakan untuk mendapatkan maklumat terperinci.
- Penyebaran Peristiwa: Peristiwa merebak dalam dua fasa: bubbling dan capturing.
- Peristiwa Borang dan Peristiwa Tersuai: Anda boleh mengendalikan pengajuan borang dan peristiwa tersuai anda sendiri.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.