Sitemap

Situ Frontend? Udah paham Event Bubbling dan Event Delegation belum?

3 min readApr 15, 2025
Photo by Safar Safarov on Unsplash

Bayangkan kamu meniup sebuah balon di tengah-tengah pesta — balonnya pecah, dan semua orang di ruangan itu langsung kaget dan heboh. Begitulah cara event bubbling bekerja. Ketika kamu hanya perlu mengundang orang tua dari anak-anak yang akan datang ke pesta tanpa perlu mengundang anak yang bersangkutan. Begitulah cara event delegation bekerja.

Sebagai seorang Frontend, adalah sebuah keharusan untuk memahami kedua konsep ini. Dengan memahami keduanya, berinteraksi dengan JavasScript dan DOM akan menjadi lebih mudah dan efisien.

Event Bubbling

Event bubbling adalah sebuah mekanisme di JavaScript, di mana ketika kamu melakukan trigger event pada suatu elemen pada DOM, event tersebut akan naik ke atas, dari element yang diklik ke element parent-nya, dan terus berlanjut hingga menuju document.

Sekarang coba perhatikan kode berikut ini:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#blue {
display: flex;
justify-content: center;
align-items: center;
position: relative;
width: 300px;
height: 300px;
background-color: lightblue;
}

#green {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
width: 200px;
height: 200px;
background-color: lightgreen;
}

#red {
width: 100px;
height: 100px;
background-color: lightcoral;
}
</style>
</head>

<body>
<div id="blue">
<div id="green">
<div id="red"></div>
</div>
</div>
</body>

<script>
const blue = document.getElementById('blue');
const green = document.getElementById('green');
const red = document.getElementById('red');

blue.addEventListener('click', onClick);
green.addEventListener('click', onClick);
red.addEventListener('click', onClick);

function onClick(e) {
console.log('Current Target:', e.currentTarget.id);
};
</script>
</html>

Jika kamu membukanya di browser, maka kamu akan melihat tampilan seperti ini:

Event bubbling example

Sekarang, jika kamu mengklik kotak berwarna merah, maka di console akan menampilkan:

Current Target: red
Current Target: green
Current Target: blue

Jika yang diklik adalah kotak berwarna hijau, maka yang akan muncul di console adalah:

Current Target: green
Current Target: blue

Dan terakhir, jika yang kamu klik adalah kotak berwarna biru, maka yang akan muncul di console adalah:

Current Target: blue

Hal ini bisa terjadi dikarenakan secara default, event pada JavaScript akan berpropagasi, dan inilah yang disebut dengan event bubbling.

Apakah event bubbling ini bisa dihentikan? — Tentu saja!
Caranya adalah dengan menghentikan propagasi pada event yang sedang berjalan dengan menggunakan e.stopPropagation(), coba perhatikan kode berikut:

function onClick(e) {
console.log('Current Target:', e.currentTarget.id);
e.stopPropagation();
};

Dengan kode di atas, console hanya akan menampilkan tulisan sesuai dengan elemen yang diklik, jika yang diklik adalah kotak merah, maka yang muncul hanyalah Current Target: red, begitupun seterusnya.

Sedangkan jika kamu ingin menghentikan nya pada kondisi tertentu, bisa juga menggunakan code di bawah ini:

function onClick(e) {
console.log('Current Target:', e.currentTarget.id);
if (e.currentTarget.id === 'green') {
e.stopPropagation();
}
};

Dengan kode ini, ketika kamu mengklik kotak berwarna merah, maka yang muncul di console adalah:

Current Target: red
Current Target: green

Karena propagasi akan berhenti setelah mencapai kotak berwarna hijau.

Event Delegation

Dengan adanya event bubbling pada JavaScript, ini memungkinkanmu untuk bisa melakukan teknik event delegation untuk mempersingkat kodingan mu dan juga menghemat performa, keran cukup membuat 1 event yang bisa di delegasikan.

Persis seperti ilustrasi yang saya buat di atas, begitupun pada JavaScript, ketika kamu ingin memasang event pada suatu elemen yang seragam dan berulang, kamu tidak perlu memasang event pada setiap elemen tersebut, kamu cukup mendelegasikan nya ke parent dari elemen-elemen yang ingin kamu pasangi event tersebut, maka semua elemen pun akan memilki event tanpa perlu di pasang satu persatu.

Masih pusing?
Coba perhatikan contoh sederhana berikut ini:

...
<ul id="todo-list">
<li>Sikat gigi</li>
<li>Makan pagi</li>
<li>Memakai Sepatu</li>
</ul>
...

<script>
document.getElementById('todo-list').addEventListener('click', function(e) {
if (e.target.tagName === 'LI') {
console.log('Todo yang diklik:', e.target.textContent);
}
});
</script>

Dengan kode di atas, setiap elemen li akan memiliki event on click yang sama, tanpa perlu kamu pasang satu persatu kepada semua elemen li yang ada di sana. Kamu cukup mesang nya ke parent dari semua elemen yang ingin kita pasangi event tersebut.

Begitupun ketika kamu menambahkan eleme li baru secara dinamis, maka elemen baru tersebut akan secara otomatis memiliki event yang sama.

Mudah dan sederhana bukan?
Happy Coding ^^

--

--

No responses yet