CodeGym /Kurslar /Frontend SELF AZ /Event Bubbling və Capturing

Event Bubbling və Capturing

Frontend SELF AZ
Səviyyə , Dərs
Mövcuddur

7.1 Event Bubbling (Hadisələrin üzə çıxması)

JavaScript-də bir elementdə baş verən hadisələr DOM ağacı üzrə yayıla bilər. Bu proses hadisələrin yayılması adlanır və iki əsas mexanizmi əhatə edir: hadisələrin üzə çıxması (event bubbling)hadisələrin tutulması (event capturing).

Hadisələrin yayılma mexanizmləri:

  1. Event Bubbling (Hadisələrin üzə çıxması).
  2. Event Capturing (Hadisələrin tutulması).

Hadisələrin üzə çıxması — bu prosesdə bir uşaq elementdə baş verən hadisə, valideynlər zənciri üzrə ardıcıl olaraq yuxarıya doğru yayılar və kök elementə (document) qədər gedib çıxır.

İzah:

  • child düyməsi sıxıldıqda, əvvəlcə child elementində hadisə emalçısı işə düşür (Child clicked).
  • Daha sonra hadisə parent elementinə üstə çıxır və onun emalçısı işə düşür (Parent clicked).

Nümunə:

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Event Bubbling Example</title>
        </head>
        <body>
          <div id="parent">
            <button id="child">Click Me</button>
          </div>
          <script>
            const parent = document.getElementById('parent');
            const child = document.getElementById('child');

            parent.addEventListener('click', function(event) {
              console.log('Parent clicked');
            });

            child.addEventListener('click', function(event) {
              console.log('Child clicked');
            });
          </script>
        </body>
      </html>
    
  

7.2 Event Capturing (Hadisələrin ələ keçirilməsi)

Hadisələrin ələ keçirilməsi — bu o prosesdir ki, hadisə əvvəlcə kök elementdən başlayıb valideynlər zəncirindən aşağıya doğru hərəkət edir və sonra hadisənin baş verdiyi hədəf elementə çatır.

Hadisələrin ələ keçirilməsini istifadə etmək üçün, event listener əlavə edərkən capture parametrini true etmək lazımdır.

İzah:

  • child düyməsi basıldıqda, əvvəlcə valideyn elementdə event handler işə düşür (Parent clicked) bu capture parametrinin true olaraq təyin edilməsinə görə baş verir.
  • Daha sonra hadisə hədəf elementə - child-a çatır və onun event handler-i işə düşür (Child clicked)

Nümunə:

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Event Capturing Misalı</title>
        </head>
        <body>
          <div id="parent">
            <button id="child">Məni klikləyin</button>
          </div>
          <script>
            const parent = document.getElementById('parent');
            const child = document.getElementById('child');

            parent.addEventListener('click', function(event) {
              console.log('Parent clicked');
            }, true);

            child.addEventListener('click', function(event) {
              console.log('Child clicked');
            });
          </script>
        </body>
      </html>
    
  

7.3 Eventlərin yayılması üç mərhələli modeli

DOM-da baş verən hadisə üç mərhələdən ibarətdir:

1. Capturing Phase (Qəbul etmə mərhələsi). Hadisə kök elementdən (adətən document) başlayaraq valideynlərin zənciri vasitəsilə hədəf elementinə qədər yayılır.

2. Target Phase (Hədəf mərhələsi). Hadisə baş verdiyi hədəf elementinə çatır.

3. Bubbling Phase (Yuxarı qalxma mərhələsi). Hadisə hədəf elementindən başlayaraq valideynlərin zənciri vasitəsilə kök elementə qədər yayılır.

Eventlərin yayılmasını idarəetmə

Eventlərin yayılmasını idarə etmək üçün metodlar mövcuddur:

  1. stopPropagation(). Hadisənin daha da yayılmasını həm yuxarı qalxma, həm də qəbul etmə zamanı dayandırır.
  2. stopImmediatePropagation(). Hadisənin daha da yayılmasını və cari elementdə digər event handler-lərin icrasını qarşısını alır.
  3. preventDefault(). Hadisə ilə əlaqəli default hərəkəti (məsələn, düyməyə basdıqda forma göndərilməsini) ləğv edir.

7.4 stopPropagation istifadə nümunəsi

İzahat:

  • Button child kliklənəndə, child elementinə aid event handler işə düşür (Child clicked)
  • Event-in bubblinqi event.stopPropagation() ilə dayandırılır və parent elementinə aid event handler işə düşmür
HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Stop Propagation Misalı</title>
        </head>
        <body>
          <div id="parent">
            <button id="child">Kliklə</button>
          </div>
          <script>
            const parent = document.getElementById('parent');
            const child = document.getElementById('child');

            parent.addEventListener('click', function(event) {
              console.log('Parent kliklənib');
            });

            child.addEventListener('click', function(event) {
              console.log('Child kliklənib');
              event.stopPropagation(); // Event bubblinqini dayandırır
            });
          </script>
        </body>
      </html>
    
  
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION