Masukkan Password
40 Peristiwa DOM & Penanganan Peristiwa
Lecture ini adalah lanjutan langsung dari lecture sebelumnya tentang dynamic rendering.
Kalau lecture sebelumnya kita sudah belajar:
โBagaimana cara menampilkan section tertentu secara dinamis?โ
Sekarang kita belajar:
โBagaimana cara membuat JavaScript bereaksi ketika user melakukan sesuatu, misalnya mengklik tombol/tab?โ
Konsep utama lecture ini adalah DOM Event + Event Handling, khususnya menggunakan inline event handler dengan onclick.
1. Apa itu Event?
Event = sesuatu yang terjadi pada halaman/aplikasi.
Contohnya:
- user klik tombol
- user mengarahkan mouse ke element
- user keluar dari element
- user fokus ke input
- user mengetik sesuatu
- user melakukan scroll
- browser di-resize
Untuk lecture ini, fokusnya adalah event yang terjadi pada DOM element.
Misalnya:
<button>Click Me</button>
Ketika user mengklik tombol tersebut:
user
โ
klik button
โ
CLICK EVENT terjadi
Nah, JavaScript bisa mendeteksi event tersebut dan melakukan sesuatu.
2. JavaScript adalah Event-Driven Programming Language
Ini kalimat yang penting dari lecture:
JavaScript adalah event-driven programming language.
Artinya, banyak program JavaScript bekerja dengan cara:
Tunggu sesuatu terjadi
โ
Event terjadi
โ
Jalankan kode
โ
Berikan respons
Contoh website:
User klik "Login"
โ
JavaScript mendeteksi click
โ
JavaScript menjalankan function
โ
Form diproses
โ
Tampilan berubah
Atau:
User mengetik
โ
input event
โ
JavaScript membaca input
โ
menampilkan hasil
Jadi JavaScript bukan hanya:
console.log("Hello");
console.log("World");
tetapi banyak digunakan untuk:
โKalau sesuatu terjadi, lakukan sesuatu.โ
3. Jenis-jenis Event
Lecture membedakan beberapa kategori event.
A. DOM Event
Event yang terjadi pada element halaman.
Contoh:
click
focus
mouseover
mouseenter
mouseout
Misalnya:
<button>
User klik button โ click event.
B. Browser Event
Event yang berhubungan dengan browser/window.
Contoh:
scroll
resize
maximize
minimize
Misalnya user scroll halaman:
user scroll
โ
browser scroll event
C. Keyboard Event
Event yang terjadi karena keyboard.
Misalnya:
keydown
keyup
User menekan tombol keyboard:
user tekan "A"
โ
keyboard event
D. Mouse Event
Event yang berhubungan dengan mouse.
Contohnya:
click
mouseenter
mouseleave
mousedown
mouseup
Untuk lecture ini kita fokus pada:
DOM event, khususnya click.
4. Event Handling itu apa?
Misalnya ada:
<button>Delete</button>
User klik button.
Event terjadi:
CLICK
Kemudian kita ingin JavaScript melakukan:
console.log("Button clicked");
Proses ketika kita membuat JavaScript merespons event disebut:
Event handling
Jadi:
Event
โ
JavaScript merespons
โ
Event handling
5. Tiga istilah yang WAJIB dibedakan
Lecture memperkenalkan tiga istilah:
Event
Event Listener
Event Handler
Ini sering membingungkan pemula.
5.1 Event
Event = kejadian.
Contoh:
click
User klik button:
CLICK EVENT
5.2 Event Listener
Event listener = sesuatu yang mendengarkan/menunggu event.
Misalnya:
“Kalau button ini diklik, saya mau tahu.”
Secara konsep:
Button
โ
Event Listener
โ
menunggu click
5.3 Event Handler
Event handler = kode/function yang dijalankan ketika event terjadi.
Misalnya:
function handleClick() {
console.log("Button clicked");
}
Function tersebut adalah logic yang menangani event.
Jadi:
USER KLIK
โ
EVENT
โ
LISTENER mendeteksi
โ
HANDLER dijalankan
โ
JavaScript melakukan sesuatu
6. Analogi sederhana: satpam ๐
Bayangkan sebuah toko.
Ada pintu:
๐ช
Ketika pintu dibuka:
Door Open Event
Kemudian ada satpam yang menunggu:
๐ฎ
Satpam tersebut adalah listener.
Dia mendengarkan:
“Apakah pintu dibuka?”
Ketika pintu dibuka, satpam menjalankan prosedur:
"Selamat datang!"
Itulah handler.
Jadi:
Event
= pintu dibuka
Listener
= satpam yang menunggu
Handler
= tindakan ketika pintu dibuka
7. Ada 3 cara menangani event
Lecture menyebut ada tiga cara utama:
1. Inline event handler
onclick="..."
2. Event handler property
Misalnya:
button.onclick = ...
3. addEventListener()
button.addEventListener(...)
Untuk lecture ini kita baru belajar:
Inline event handler
Dua lainnya akan dibahas di lecture berikutnya.
8. Apa itu Inline Event Handler?
Inline artinya kita menuliskan event handler langsung di HTML element.
Misalnya:
<button onclick="sayHello()">
Click Me
</button>
Perhatikan:
onclick
click adalah nama event.
Kita tambahkan:
on + event
sehingga:
click
โ
onclick
Contoh lainnya:
click โ onclick
focus โ onfocus
mouseover โ onmouseover
9. onclick adalah attribute HTML
Misalnya:
<div onclick="sayHello()">
Home
</div>
Di sini:
onclick="sayHello()"
adalah attribute.
Artinya:
Ketika element ini mengalami click event, jalankan
sayHello().
10. Hubungkan dengan lecture Function
Misalnya kita punya:
function sayHello() {
console.log("Hello");
}
HTML:
<button onclick="sayHello()">
Click Me
</button>
Saat halaman dimuat:
function belum dijalankan
Function baru dijalankan ketika:
user klik button
โ
onclick
โ
sayHello()
โ
console.log("Hello")
11. Sekarang hubungkan dengan project sebelumnya
Kita punya tiga tab:
Home | EMI Calculator | Apply for Loan
Dan sebelumnya kita sudah membuat function:
renderSelectedSection()
Function tersebut menentukan section mana yang harus ditampilkan.
Sekarang masalahnya:
Bagaimana membuat function tersebut dijalankan ketika user klik tab?
Jawabannya di lecture ini:
onclick
12. Home tab
Misalnya HTML:
<div onclick="renderSelectedSection('homepage')">
Home
</div>
Artinya:
Ketika Home diklik, panggil
renderSelectedSection()dan kirim"homepage".
Jadi:
User klik Home
โ
click event
โ
onclick
โ
renderSelectedSection("homepage")
โ
switch
โ
case "homepage"
โ
render Home
13. EMI Calculator
Untuk EMI:
<div onclick="renderSelectedSection('emi-calculator-page')">
EMI Calculator
</div>
Ketika diklik:
click
โ
renderSelectedSection("emi-calculator-page")
โ
switch
โ
case "emi-calculator-page"
โ
render EMI
14. Apply for Loan
<div onclick="renderSelectedSection('apply-for-loan-page')">
Apply for Loan
</div>
Ketika diklik:
click
โ
renderSelectedSection("apply-for-loan-page")
โ
render Loan
15. Kenapa string-nya harus tepat?
Karena function sebelumnya menggunakan:
switch (selectedTab) {
case "homepage":
...
break;
case "emi-calculator-page":
...
break;
case "apply-for-loan-page":
...
break;
}
Maka nilai yang dikirim harus cocok.
Misalnya:
renderSelectedSection("homepage");
akan cocok dengan:
case "homepage":
Tetapi kalau:
renderSelectedSection("home");
sementara case-nya:
case "homepage":
tidak cocok.
Karena string-nya berbeda.
16. Alur lengkapnya
Ini bagian yang paling penting untuk dipahami:
USER
โ
klik tab Home
โ
CLICK EVENT
โ
onclick
โ
renderSelectedSection("homepage")
โ
switch
โ
case "homepage"
โ
ambil homeContent
โ
mainSectionArea.innerHTML
โ
DOM berubah
โ
Home ditampilkan
Untuk EMI:
User klik EMI
โ
click
โ
onclick
โ
renderSelectedSection("emi-calculator-page")
โ
switch
โ
EMI section
โ
DOM berubah
โ
EMI ditampilkan
17. Ada masalah dari lecture sebelumnya
Nah, sekarang masuk ke bagian yang cukup penting.
Di lecture sebelumnya kita punya masalah ketika variable content dibuat di dalam function.
Misalnya:
function renderSelectedSection(selectedTab) {
let homeContent =
document.querySelector(".homepage");
...
mainSectionArea.innerHTML = "";
...
}
Masalahnya:
Pertama kali function dijalankan
โ
ambil section
โ
hapus section dari DOM
โ
function selesai
Kemudian user klik tab
โ
function dijalankan lagi
โ
querySelector(".homepage")
โ
homepage sudah tidak ada di DOM
โ
null
Akhirnya error.
18. Solusinya: variable content di luar function
Kita sudah belajar di lecture sebelumnya bahwa variable content harus dibuat di luar function:
let homeContent =
document.querySelector(".homepage");
let emiCalContent =
document.querySelector(".emi-calculator-page");
let loanContent =
document.querySelector(".apply-for-loan-page");
Kemudian:
function renderSelectedSection(selectedTab) {
...
}
Dengan begitu:
JavaScript mulai
โ
ambil Home
ambil EMI
ambil Loan
โ
simpan reference
โ
selesai
Reference tersebut tidak dibuat ulang setiap kali function dipanggil.
19. Kenapa ini penting untuk event?
Karena sekarang function:
renderSelectedSection()
akan dipanggil berulang kali.
Misalnya:
Klik Home
โ
function
Klik EMI
โ
function
Klik Loan
โ
function
Klik Home
โ
function
Klik EMI
โ
function
Kalau variable content dibuat di dalam function, kita akan menghadapi masalah DOM yang sama.
Tetapi kalau dibuat di luar:
let homeContent = ...
let emiCalContent = ...
let loanContent = ...
mereka dibuat satu kali.
20. Hubungan dengan Scope
Ini juga mengulang materi scope yang sudah kamu pelajari.
Kalau:
function renderSelectedSection() {
let homeContent = ...;
}
maka homeContent memiliki function scope.
Dia hanya tersedia di dalam function tersebut.
Dan setiap kali function dipanggil, variable lokal tersebut dibuat dalam execution baru.
Sedangkan:
let homeContent = ...;
function renderSelectedSection() {
...
}
homeContent berada di scope luar function.
Function bisa mengaksesnya.
Secara sederhana:
Global scope
โ
โโโ homeContent
โโโ emiCalContent
โโโ loanContent
โ
โโโ renderSelectedSection()
Jadi function dapat menggunakan variable tersebut.
Ini adalah contoh nyata bagaimana konsep scope yang sebelumnya kamu pelajari digunakan dalam program.
21. Kenapa awal halaman tetap Home?
Lecture kemudian melakukan:
renderSelectedSection("homepage");
Ini dipanggil langsung ketika JavaScript pertama kali dijalankan.
Tujuannya:
Saat website pertama kali dibuka, tampilkan Home.
Alurnya:
Browser load
โ
JavaScript dijalankan
โ
renderSelectedSection("homepage")
โ
Home ditampilkan
Setelah itu, event handler mengambil alih.
22. Bedakan initial render dan click render
Ada dua situasi.
Saat pertama kali halaman dibuka:
renderSelectedSection("homepage");
Artinya:
Tampilkan Home secara default.
Saat user klik EMI:
onclick="renderSelectedSection('emi-calculator-page')"
Artinya:
Sekarang tampilkan EMI.
Saat user klik Loan:
onclick="renderSelectedSection('apply-for-loan-page')"
Artinya:
Sekarang tampilkan Loan.
Jadi function yang sama digunakan berulang kali.
23. Function yang sama bisa dipanggil berkali-kali
Ini adalah manfaat besar dari function.
Kita punya satu function:
function renderSelectedSection(selectedTab) {
...
}
Tetapi bisa dipanggil:
renderSelectedSection("homepage");
renderSelectedSection("emi-calculator-page");
renderSelectedSection("apply-for-loan-page");
Jadi:
renderSelectedSection()
โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โ โ โ
Home EMI Loan
Tidak perlu membuat:
renderHome();
renderEMI();
renderLoan();
kalau satu function sudah bisa menangani semuanya.
24. Apa sebenarnya onclick lakukan?
Misalnya:
<div onclick="renderSelectedSection('homepage')">
Home
</div>
Kita bisa membacanya seperti bahasa manusia:
โKalau element ini di-click, jalankan
renderSelectedSection('homepage').โ
Jadi:
onclick
โ
WHEN CLICK HAPPENS
โ
RUN THIS CODE
25. Inline event handler
Disebut inline karena JavaScript event logic ditulis langsung di HTML:
onclick="..."
Contoh:
<button onclick="alert('Hello')">
Click
</button>
JavaScript-nya berada di dalam attribute HTML.
Karena itu disebut:
inline event handler
26. Contoh sederhana sebelum kembali ke project
HTML:
<button onclick="sayHello()">
Click Me
</button>
JavaScript:
function sayHello() {
console.log("Hello World");
}
Flow:
button
โ
user click
โ
onclick
โ
sayHello()
โ
console.log()
27. Inline handler bisa langsung menjalankan expression
Lecture mengatakan attribute onclick bisa berisi JavaScript expression.
Misalnya:
<button onclick="console.log('Hello')">
Click
</button>
Tidak harus selalu function.
Tetapi dalam contoh project, lebih baik menggunakan function:
onclick="renderSelectedSection('homepage')"
karena logic rendering cukup kompleks.
28. Kenapa function dipakai daripada menulis semua logic di onclick?
Bayangkan kita menulis langsung:
<div onclick="
mainSectionArea.innerHTML = ...;
switch (...) {
...
}
">
HTML akan menjadi sangat berantakan.
Lebih baik:
<div onclick="renderSelectedSection('homepage')">
Kemudian logic berada di JavaScript:
function renderSelectedSection(selectedTab) {
...
}
Jadi:
HTML
โ
menentukan event
JavaScript
โ
menangani logic
Walaupun inline handler masih mencampurkan sedikit behavior ke HTML, setidaknya logic utama tetap berada dalam function.
29. Perbedaan event, listener, handler
Mari kita buat sangat jelas.
Misalnya:
<button onclick="sayHello()">
Event
click
Kejadiannya:
User mengklik button.
Listener
Dalam pendekatan inline ini, attribute:
onclick
digunakan untuk memasang respons terhadap event click.
Secara konseptual:
โDengarkan click pada element ini.โ
Handler
sayHello()
adalah kode/function yang dijalankan ketika click terjadi.
30. Analogi restoran ๐
Bayangkan kamu masuk restoran.
Event
Kamu berkata:
“Saya mau pesan mie.”
Itu adalah kejadian/request.
Listener
Pelayan mendengarkan pesanan:
“Ada pesanan dari meja 5.”
Itu seperti listener.
Handler
Dapur kemudian menjalankan:
“Buat mie.”
Itu adalah handler.
Jadi:
Event
โ
Listener
โ
Handler
โ
Action
31. Hubungan dengan callback
Ini juga nyambung dengan lecture sebelumnya tentang callback function.
Nanti saat menggunakan:
addEventListener()
kita akan sering melihat:
button.addEventListener("click", function () {
console.log("Clicked");
});
Function:
function () {
console.log("Clicked");
}
adalah callback.
Artinya konsep event yang sekarang kamu pelajari nanti akan bertemu dengan konsep callback yang sudah kamu pelajari.
Untuk sekarang cukup ingat:
Event terjadi
โ
function dijalankan
32. Kenapa JavaScript disebut event-driven?
Karena program tidak selalu melakukan sesuatu secara terus-menerus.
Misalnya website sedang diam:
Website menunggu...
User klik:
CLICK!
JavaScript merespons.
User mengetik:
KEYBOARD EVENT!
JavaScript merespons.
User fokus ke input:
FOCUS!
JavaScript merespons.
User scroll:
SCROLL!
JavaScript merespons.
Jadi:
WAIT
โ
EVENT
โ
RESPONSE
โ
WAIT
โ
EVENT
โ
RESPONSE
33. Hal yang perlu kamu perhatikan: onclick vs click
Ini sering membingungkan.
Nama event-nya adalah:
click
Tetapi ketika digunakan sebagai attribute HTML:
onclick
Kenapa?
Karena inline event handler menggunakan:
on + nama event
Jadi:
click โ onclick
focus โ onfocus
load โ onload
mouseover โ onmouseover
34. Jangan salah menulis
Benar:
onclick="..."
Bukan:
onClick="..."
HTML umumnya tidak membedakan kapitalisasi attribute seperti JavaScript identifier, tetapi ikuti gaya standar lowercase untuk inline HTML event handler agar konsisten.
Dan:
onclick="renderSelectedSection('homepage')"
bukan:
click="..."
35. Apa yang terjadi ketika Home diklik?
Mari kita ikuti satu per satu.
HTML:
<div onclick="renderSelectedSection('homepage')">
Home
</div>
User klik.
Step 1
Browser mendeteksi:
click event
Step 2
Inline handler:
onclick
dijalankan.
Step 3
JavaScript menjalankan:
renderSelectedSection("homepage");
Step 4
Function menerima:
selectedTab = "homepage";
Step 5
switch dijalankan:
switch (selectedTab)
Step 6
Cocok dengan:
case "homepage":
Step 7
Home dimasukkan ke:
mainSectionArea.innerHTML
Step 8
DOM berubah.
Step 9
Home tampil.
36. Flow lengkap project
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Home | EMI | Apply for Loan โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ user click
โ
CLICK EVENT
โ
onclick
โ
renderSelectedSection(...)
โ
switch()
โ
โโโโโโโโผโโโโโโโโโโโ
โ โ โ
Home EMI Loan
โ โ โ
outerHTML masing-masing
โ
mainSectionArea.innerHTML
โ
DOM berubah
โ
halaman berubah
37. Mengapa lecture ini penting?
Karena ini adalah awal dari website interaktif.
Sebelumnya website kita lebih seperti:
HTML
โ
tampilkan halaman
Sekarang:
HTML
โ
JavaScript
โ
menunggu event
โ
user melakukan sesuatu
โ
JavaScript merespons
โ
DOM berubah
โ
website berubah
Ini adalah pola yang akan kamu lihat di hampir semua aplikasi web.
38. Contoh nyata di dunia website
Hampir semua hal interaktif menggunakan konsep event.
Tombol Like
click
โ
event handler
โ
jumlah like + 1
Tombol Dark Mode
click
โ
event handler
โ
classList.add("dark")
Form Login
submit
โ
event handler
โ
validasi username/password
Search
input
โ
event handler
โ
cari data
โ
tampilkan hasil
Dropdown
click
โ
event handler
โ
tampilkan menu
Semuanya mengikuti pola:
EVENT
โ
LISTENER
โ
HANDLER
โ
ACTION
39. Kekurangan inline event handler
Walaupun lecture mengajarkan cara ini, kamu perlu tahu bahwa dalam praktik modern, inline event handler biasanya bukan pilihan utama.
Misalnya:
<button onclick="sayHello()">
akan mencampurkan HTML dan JavaScript.
Jika aplikasinya besar, HTML bisa menjadi penuh dengan:
onclick="..."
onchange="..."
onmouseover="..."
Nanti kamu akan belajar cara yang lebih rapi:
button.addEventListener("click", ...);
Jadi untuk sekarang:
Pelajari inline karena itu bagian dari course, tetapi jangan menganggap ini selalu cara terbaik untuk project besar.
40. Tiga metode event handling
Supaya kamu punya gambaran ke depan:
1. Inline
<button onclick="sayHello()">
2. Event handler property
button.onclick = sayHello;
3. addEventListener
button.addEventListener("click", sayHello);
Lecture ini:
โ
Inline event handler
Lecture berikutnya kemungkinan:
โก๏ธ Event handler property
โก๏ธ addEventListener()
41. Kesalahan umum pemula
โ 1. Menulis function dengan () saat ingin menyimpan function
Untuk event handler property nanti:
button.onclick = sayHello;
bukan:
button.onclick = sayHello();
Karena:
sayHello
berarti function.
Sedangkan:
sayHello()
berarti jalankan function sekarang.
Untuk inline:
onclick="sayHello()"
memang benar karena attribute tersebut berisi kode yang akan dijalankan ketika event terjadi.
โ 2. String tidak sama dengan case
Kalau:
case "homepage":
maka:
onclick="renderSelectedSection('homepage')"
harus mengirim string yang sama.
โ 3. Lupa tanda kutip
Misalnya:
onclick="renderSelectedSection(homepage)"
berbeda dengan:
onclick="renderSelectedSection('homepage')"
Yang kedua mengirim string "homepage".
42. Hubungkan dengan lecture switch
Sekarang konsep switch yang kamu pelajari sebelumnya menjadi nyata.
Kita punya:
switch (selectedTab) {
case "homepage":
...
break;
case "emi-calculator-page":
...
break;
case "apply-for-loan-page":
...
break;
}
Dan event menentukan nilai selectedTab.
Jadi:
CLICK HOME
โ
"homepage"
โ
switch
โ
case homepage
atau:
CLICK EMI
โ
"emi-calculator-page"
โ
switch
โ
case emi-calculator-page
43. Hubungkan dengan lecture Function
Kita juga menggunakan:
function renderSelectedSection(selectedTab) {
...
}
Ini mengulang semua konsep function:
- function declaration
- parameter
- argument
- function call
- reusable code
Misalnya:
onclick="renderSelectedSection('homepage')"
renderSelectedSection:
function
selectedTab di function:
parameter
"homepage":
argument
renderSelectedSection(...):
function call
44. Hubungkan dengan lecture Scope
Variable:
let homeContent = ...;
diletakkan di luar function.
Kenapa?
Karena function:
renderSelectedSection()
dipanggil berkali-kali oleh event.
Kita ingin homeContent, emiCalContent, dan loanContent dibuat satu kali, bukan dibuat ulang setiap click.
Ini contoh nyata kegunaan scope.
45. Hubungkan dengan lecture DOM
Kita menggunakan:
document.querySelector(...)
untuk mengambil element.
Kemudian:
element.outerHTML
untuk mendapatkan HTML.
Kemudian:
mainSectionArea.innerHTML = ...
untuk mengubah DOM.
Kemudian event:
click
memicu function.
Jadi semua materi mulai terhubung:
DOM
โ
querySelector()
โ
Element object
โ
outerHTML / innerHTML
โ
Function
โ
Event
โ
Dynamic rendering
46. Mental model terbaik untuk event
Kalau kamu masih bingung tentang event, ingat kalimat ini:
โKalau sesuatu terjadi, jalankan sesuatu.โ
Dalam JavaScript:
KALAU event terjadi
โ
JALANKAN handler
Contoh:
Kalau button diklik
โ
jalankan function
Kalau input berubah
โ
jalankan function
Kalau mouse masuk
โ
jalankan function
47. Cheat sheet lecture
Event
click
focus
mouseover
scroll
keydown
Inline event handler
onclick="..."
Memanggil function
onclick="sayHello()"
Mengirim argument
onclick="renderSelectedSection('homepage')"
Tiga konsep utama
Event
= kejadian
Event Listener
= mendengarkan event
Event Handler
= kode/function yang dijalankan
Flow
User melakukan sesuatu
โ
Event terjadi
โ
Listener mendeteksi
โ
Handler dijalankan
โ
DOM berubah
โ
UI berubah
48. Kesimpulan
Lecture ini sebenarnya memperkenalkan satu konsep besar:
Website tidak hanya menampilkan informasi, tetapi bisa bereaksi terhadap tindakan user.
Dan mekanismenya:
USER
โ
melakukan sesuatu
โ
EVENT
โ
EVENT LISTENER
โ
EVENT HANDLER
โ
JAVASCRIPT
โ
DOM MANIPULATION
โ
TAMPILAN WEBSITE BERUBAH
Dalam project kamu:
User klik "EMI Calculator"
โ
click event
โ
onclick
โ
renderSelectedSection("emi-calculator-page")
โ
switch
โ
emiCalContent.outerHTML
โ
mainSectionArea.innerHTML = ...
โ
DOM berubah
โ
EMI Calculator tampil
Jadi kalau lecture sebelumnya adalah โkita bisa mengubah DOMโ, lecture ini menambahkan:
โKapan kita harus mengubah DOM?โ
Jawabannya:
Ketika sebuah event terjadi.
Dan untuk lecture ini, event tersebut adalah click, sedangkan cara menangkapnya adalah inline event handler dengan onclick.
Satu kalimat yang sebaiknya kamu benar-benar ingat:
Event = sesuatu terjadi, listener = menunggu/mendengarkan sesuatu itu, handler = kode yang dijalankan sebagai respons terhadap sesuatu itu.