⊗jsPmOEBTE 424 of 505 menu

Ottenere l'elemento target durante il bubbling degli eventi

Supponiamo di avere due elementi: div e un paragrafo p, situato all'interno di questo div:

<div> <p></p> </div>

Otteniamo un riferimento al nostro div in una variabile:

let div = document.querySelector('div');

Aggiungiamo alcuni stili ai nostri tag:

div { padding: 20px; border: 1px solid red; } p { width: 200px; height: 200px; border: 1px solid green; }

Supponiamo ora che sul div sia associato un gestore di click:

div.addEventListener('click', function() { console.log('click'); });

Poiché il nostro div ha padding, quando clicchiamo sul div, possiamo cliccare sul paragrafo, oppure possiamo cliccare in un'area dove il paragrafo non è presente, cioè direttamente sul div.

In questo caso, nel gestore del click this indicherà sempre l'elemento a cui è associato il gestore. Nel nostro caso è il nostro div:

div.addEventListener('click', function() { console.log(this); // il div });

Tuttavia, possiamo ottenere esattamente il tag in cui si è verificato l'evento. Per fare questo possiamo controllare cosa c'è in event.target:

div.addEventListener('click', function(event) { console.log(event.target); // o il div, o il paragrafo });

È possibile distinguere queste due opzioni utilizzando delle condizioni:

let div = document.querySelector('div'); div.addEventListener('click', function(event) { if (event.target.tagName === 'DIV') { console.log('click proprio sul div'); } if (event.target.tagName === 'P') { console.log('click proprio sul paragrafo'); } });

Invece di tagName si può usare matches:

let div = document.querySelector('div'); div.addEventListener('click', function(event) { if (event.target.matches('div')) { console.log('click proprio sul div'); } if (event.target.matches('p')) { console.log('click proprio sul paragrafo'); } });

Sono dati i seguenti elementi:

<div> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> </div> div, ul, li { padding: 20px; } div { border: 1px solid red; } ul { border: 1px solid orange; } li { border: 1px solid green; }

Associate al div un gestore di click. In questo gestore determinate in quale dei tag si è verificato l'evento.

Modificate il problema precedente. Fate in modo che quando si clicca su li, venga aggiunto un punto esclamativo alla sua fine, e quando si clicca su ul vengano stampate in console le informazioni a riguardo.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta