Penanganan Peristiwa di JavaScript
Artikel ini menjelaskan penanganan peristiwa di 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>
Penanganan Peristiwa di JavaScript
Penanganan peristiwa di JavaScript adalah mekanisme untuk menjalankan tindakan tertentu dalam menanggapi operasi pengguna (seperti klik dan input keyboard) atau tindakan browser. Dengan menyiapkan pendengar peristiwa, Anda dapat membuat halaman web yang dinamis dan interaktif.
Dasar-dasar Peristiwa
Peristiwa terjadi sebagai respons terhadap operasi pengguna dan tindakan browser. Ketika suatu peristiwa terjadi, penangan peristiwa (fungsi) yang terkait akan dijalankan. Sebagai contoh, terdapat peristiwa seperti berikut:.
- Klik (
click
) - Input Keyboard (
keydown
,keyup
) - Gerakan Mouse (
mousemove
,mouseover
) - Pengiriman Formulir (
submit
) - Halaman Selesai Dimuat (
DOMContentLoaded
) - Gulir (
scroll
)
Menambahkan Pendengar Peristiwa
Pendengar peristiwa diatur menggunakan metode addEventListener()
. Metode ini memanggil fungsi tertentu saat peristiwa yang ditentukan terjadi.
Sintaks Dasar addEventListener()
1element.addEventListener(event, handler);
element
adalah elemen HTML yang memantau peristiwa (event).event
adalah nama peristiwa (misalnya,click
).handler
adalah fungsi yang dijalankan ketika peristiwa terjadi.
Objek Peristiwa
Ketika sebuah peristiwa terjadi, JavaScript memberikan sebuah objek peristiwa yang berisi detail peristiwa ke pengendali peristiwa. Objek ini mencakup informasi seperti elemen mana yang memicu peristiwa dan tombol mana yang ditekan.
Contoh: Menggunakan Objek Peristiwa
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});
- Kode ini menggunakan objek event untuk menampilkan informasi detail dan elemen yang diklik di konsol saat tombol diklik.
Peristiwa Umum
Peristiwa Klik
Peristiwa click
terjadi ketika pengguna mengklik sebuah elemen.
1element.addEventListener('click', () => {
2 console.log('Clicked');
3});
- Kode ini menampilkan pesan di konsol saat elemen diklik.
Peristiwa Keyboard
Peristiwa keydown
dan keyup
terjadi ketika pengguna menekan atau melepaskan sebuah tombol. Anda dapat menggunakan event.key
untuk melihat tombol mana yang ditekan.
1document.addEventListener('keydown', (event) => {
2 console.log(`Key pressed: ${event.key}`);
3});
- Kode ini menampilkan nama tombol di konsol saat pengguna menekan tombol.
Peristiwa Mouse
Peristiwa mousemove
dan mouseover
terjadi saat gerakan mouse dan hover.
1document.addEventListener('mousemove', (event) => {
2 console.log(`Mouse position: X=${event.clientX}, Y=${event.clientY}`);
3});
- Kode ini menampilkan posisi (koordinat X dan Y) di konsol setiap kali mouse bergerak.
Peristiwa Formulir
Peristiwa terkait formulir mencakup submit
dan input
. Peristiwa submit
terjadi ketika sebuah formulir dikirim dan biasanya menyebabkan muat ulang halaman, tetapi event.preventDefault()
sering digunakan untuk mencegah ini.
Contoh: Mencegah muat ulang halaman saat pengiriman formulir
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});
- Kode ini mencegah halaman dimuat ulang saat formulir dikirimkan dan menampilkan pesan di konsol sebagai gantinya.
Propagasi Peristiwa (Bubbling dan Capturing)
Peristiwa dipropagasi melalui dua tahap: fase capturing, yang berjalan dari elemen induk ke elemen anak, dan fase bubbling, yang berjalan dari elemen anak ke elemen induk.
Peristiwa Bubbling
Secara default, peristiwa terjadi pada elemen terdalam dan dipropagasi keluar. Ini disebut 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, ketika Anda mengklik sebuah tombol, peristiwa tombol terjadi terlebih dahulu, lalu diikuti peristiwa elemen induk.
Peristiwa Capturing
Dengan menentukan true
sebagai argumen ketiga dalam addEventListener()
, Anda dapat menangani peristiwa pada fase capturing.
1parent.addEventListener('click', () => {
2 console.log('Capturing: Parent element was clicked');
3}, true);
- Kode ini menangani peristiwa klik elemen induk pada fase capturing dan menampilkan pesan di konsol.
Mencegah Propagasi dengan stopPropagation()
Anda dapat menghentikan perambatan event menggunakan event.stopPropagation()
.
1button.addEventListener('click', (event) => {
2 event.stopPropagation(); // Stop the event propagation
3 console.log('Button was clicked (no propagation)');
4});
- Kode ini mencegah peristiwa menyebar saat tombol diklik dan menampilkan pesan di konsol.
Menghapus Event
Anda dapat menghapus pendengar event menggunakan removeEventListener()
. Untuk menghapus pendengar event, Anda memerlukan referensi ke 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
- Kode ini menghapus pendengar peristiwa klik dari tombol sehingga tidak akan ditangani lagi saat diklik.
Event Kustom
Dalam JavaScript, Anda dapat membuat dan memicu event kustom selain event standar. Gunakan konstruktor 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);
- Kode ini membuat dan mengirimkan peristiwa kustom
myCustomEvent
, serta menampilkan detailnya di konsol.
Ringkasan
Penanganan peristiwa merupakan elemen penting untuk meningkatkan interaktivitas aplikasi web. Dengan memanfaatkan komponen penanganan peristiwa, Anda dapat memberikan pengalaman pengguna yang lebih fleksibel dan canggih.
- Pendengar Event: Gunakan
addEventListener()
untuk menetapkan pengendali event pada elemen. - Objek Event: Ketika sebuah event terjadi, sebuah objek event diteruskan yang dapat digunakan untuk memperoleh informasi terperinci.
- Perambatan Event: Event merambat dalam dua fase: bubbling dan capturing.
- Event Form dan Event Kustom: Anda dapat menangani pengiriman form dan event kustom Anda sendiri.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.