Sobes.tech
Junior

Τι είναι το μοντέλο συμβάντων στον περιηγητή;

sobes.tech AI

Απάντηση από AI

Μέθοδος διαχείρισης αλληλεπιδράσεων χρήστη (κλικ, εισαγωγή, hover) και συστημικών γεγονότων (φόρτωση σελίδας, σφάλματα) στον ιστότοπο.

Βασικές έννοιες:

  • Γεγονός: Η ενέργεια που συνέβη.
  • Χειριστής γεγονότος: Συνάρτηση που εκτελείται κατά την εμφάνιση του γεγονότος.
  • Αντικείμενο γεγονότος (Event object): Μεταβιβάζεται στον χειριστή και περιέχει πληροφορίες σχετικά με το γεγονός (τύπος, στοιχείο, συντεταγμένες κ.λπ.).

Τυπική ροή γεγονότων:

  1. Αποκορύφωση (Capturing): Το γεγονός κατεβαίνει από το ανώτερο στοιχείο DOM (Window, Document) στο στοιχείο στόχο. Οι χειριστές σε αυτό το στάδιο ενεργοποιούνται πρώτοι.
  2. Φάση στόχου (Target phase): Το γεγονός φτάνει στο στοιχείο στόχο όπου συνέβη.
  3. Bubbling (Φάση αναδίπλωσης): Το γεγονός ανεβαίνει από το στοιχείο στόχο μέσω του DOM πίσω στο Window. Οι χειριστές σε αυτό το στάδιο ενεργοποιούνται μετά τις φάσεις αποκορύφωσης και στόχου.

Προσθήκη χειριστών:

  • HTML χαρακτηριστικά (onclick, onload): Παρωχημένη μέθοδος, δεν συνιστάται για πολύπλοκες εφαρμογές.
  • Ιδιότητες στοιχείων DOM (element.onclick): Μπορεί να οριστεί μόνο ένας χειριστής ανά τύπο γεγονότος για κάθε στοιχείο.
    // Παράδειγμα
    const button = document.querySelector('button');
    button.onclick = function() {
        alert('Πατήθηκε το κουμπί!');
    };
    
  • Μέθοδος addEventListener: Προτιμώμενη μέθοδος. Επιτρέπει την προσθήκη πολλαπλών χειριστών σε ένα γεγονός και τον έλεγχο της φάσης διαχείρισης (αποκορύφωση ή αναδίπλωση).
    // Παράδειγμα
    const button = document.querySelector('button');
    button.addEventListener('click', function(event) {
        console.log('Κλικ στο κουμπί!', event);
    }, false); // false - αναδίπλωση, true - αποκορύφωση
    

Η μέθοδος removeEventListener χρησιμοποιείται για την αφαίρεση χειριστών.

Αποστολή γεγονότων (Event delegation): Προσθήκη ενός χειριστή σε έναν γονικό στοιχείο για τη διαχείριση γεγονότων από τα παιδικά στοιχεία. Εξοικονομεί πόρους και απλοποιεί τη δουλειά με δυναμικό περιεχόμενο.

// Παράδειγμα αποστολής
const list = document.querySelector('ul');
list.addEventListener('click', function(event) {
    if (event.target.tagName === 'LI') {
        console.log('Κλικ σε στοιχείο λίστας:', event.target.textContent);
    }
});