⊗jsPmOENEH 430 of 505 menu

Προσθήκη Event Listeners σε Νέα Στοιχεία σε JavaScript

Ας υποθέσουμε ότι έχουμε μια λίστα ul και ένα κουμπί:

<ul> <li>item</li> <li>item</li> <li>item</li> <li>item</li> <li>item</li> </ul> <button>add</button>

Ας πάρουμε τα στοιχεία μας στις αντίστοιχες μεταβλητές:

let button = document.querySelector('button'); let list = document.querySelector('ul'); let items = list.querySelectorAll('li');

Ας κάνουμε έτσι ώστε με κλικ σε οποιοδήποτε li να προστίθεται ένα θαυμαστικό στο τέλος του:

for (let item of items) { item.addEventListener('click', function() { this.textContent = this.textContent + '!'; }); }

Ας κάνουμε τώρα έτσι ώστε με πάτημα στο κουμπί να προστίθεται ένα νέο li στο τέλος της λίστας:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; list.appendChild(item); });

Ωστόσο, θα αντιμετωπίσουμε ένα πρόβλημα: το κλικ στο νέο προσθετημένο li δεν θα προκαλεί την προσθήκη θαυμαστικού στο τέλος. Ο λόγος είναι ότι προσθέτουμε event listener για το κλικ μόνο σε εκείνα τα li που υπήρχαν αρχικά, αλλά όχι στα νέα.

Ας διορθώσουμε το πρόβλημα, προσθέτοντας στο νέο li event listener για κλικ:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', function() { // event listener κλικ this.textContent = this.textContent + '!'; }); list.appendChild(item); });

Ωστόσο, τώρα ο κώδικας της συνάρτησης-επεξεργαστή διπλασιάζεται σε δύο σημεία - για τα αρχικά li και για τα νέα. Ας το διορθώσουμε βγάζοντας τον σε ξεχωριστή συνάρτηση:

function handler() { this.textContent = this.textContent + '!'; }

Ας χρησιμοποιήσουμε τη συνάρτησή μας για να αποφύγουμε τον διπλασιασμό κώδικα:

for (let item of items) { item.addEventListener('click', handler); } button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', handler); list.appendChild(item); });

Το πρόβλημα μπορεί να θεωρηθεί λυμένο και αποφύγαμε τον διπλασιασμό κώδικα της συνάρτησης-επεξεργαστή. Ωστόσο, η προσθήκη event listeners πρέπει ακόμα να γίνεται σε δύο σημεία: τόσο στον βρόχο για τα υπάρχοντα li, όσο και στο κλικ στο κουμπί. Στο επόμενο μάθημα θα δούμε έναν τρόπο να ξεφορτωθούμε αυτή τη δυσκολία.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη