Czym jest propagacja zdarzeń w JavaScript?

Propagacja zdarzeń to mechanizm w JavaScript, dzięki któremu zdarzenia przechodzą przez trzy fazy: przechwytywanie (capturing), docelowe wykonanie (target), oraz bąbelkowanie (bubbling). Ten mechanizm umożliwia precyzyjne kontrolowanie sposobu, w jaki obsługiwane są zdarzenia, szczególnie gdy mamy do czynienia z zagnieżdżonymi elementami.

Przykład użycia propagacji zdarzeń

W tym przykładzie zobaczymy, jak propagacja zdarzeń może być wykorzystana w praktyce. Utworzymy prosty kod HTML z zagnieżdżonymi elementami oraz skrypt JavaScript, który będzie nasłuchiwał zdarzeń kliknięcia na różnych poziomach.

Kod HTML
<!DOCTYPE html>
<html>
<head>
    <title>Propagacja zdarzeń w JavaScript</title>
</head>
<body>
    <div id="outer" style="padding: 20px; background-color: lightblue;">
        Zewnętrzny DIV
        <div id="inner" style="padding: 20px; background-color: lightcoral;">
            Wewnętrzny DIV
        </div>
    </div>

    <script src="script.js"></script>
</body>
</html>
Kod JavaScript (script.js)
// Dodanie nasłuchiwaczy do elementów
document.getElementById('outer').addEventListener('click', function() {
    // false oznacza, że nasłuchiwacz jest 
    // uruchamiany w fazie bąbelkowania
    alert('Kliknięto zewnętrzny DIV!');
}, false); =

document.getElementById('inner')
   .addEventListener('click', function(event) {
    alert('Kliknięto wewnętrzny DIV!');
    // Zatrzymuje propagację, więc zewnętrzny
    // DIV nie odbierze zdarzenia
    event.stopPropagation(); 
}, false);

Wyjaśnienie

W powyższym przykładzie, kliknięcie na inner DIV wywoła alert z tekstem “Kliknięto wewnętrzny DIV!” i zatrzyma propagację zdarzenia dzięki event.stopPropagation(). Oznacza to, że zdarzenie nie dotrze do outer DIV, mimo że z technicznego punktu widzenia kliknięcie na element wewnętrzny również jest kliknięciem na element zewnętrzny.

Jeśli usuniemy event.stopPropagation(), kliknięcie na inner DIV spowoduje pojawienie się obu alertów – najpierw dla wewnętrznego DIV, a następnie dla zewnętrznego. Pokazuje to, jak zdarzenia “bąbelkują” od najgłębiej zagnieżdżonego elementu do najbardziej zewnętrznego.

Podsumowanie

Propagacja zdarzeń w JavaScript pozwala na zaawansowaną kontrolę nad obsługą zdarzeń w aplikacjach webowych. Mechanizm ten oferuje dwa tryby propagacji – bąbelkowanie i przechwytywanie, co umożliwia wybór najbardziej odpowiedniego sposobu obsługi zdarzeń, w zależności od kontekstu. Zrozumienie i właściwe wykorzystanie propagacji zdarzeń jest kluczowe dla tworzenia interaktywnych i użytkowych interfejsów webowych.

 

Scroll to Top