Per semplificare ho separato le cose, prima creo la tabella con i titoli e assegno gli id:
codice:
for (let i = 0; i < dvd.length; i++) { // ciclo per caricare i titoli
tabella += "<tr><td id='" + i + "'>";
tabella += dvd[i].getElementsByTagName("titolo")[0].childNodes[0].nodeValue;
tabella += "</td></tr>";
}
Poi inserisco la tabella nel table con id="tabella":
codice:
document.getElementById("tabella").innerHTML = tabella;
Quindi assegno gli eventi a tutti i td tramite i loro id progressivi:
codice:
for (let i = 0; i < dvd.length; i++) {
document.getElementById(i).addEventListener("click", mostra);
}
Risultato: mostra(i) ignora i click su tutti i td e va in errore sull'ultimo:
Uncaught TypeError: Cannot read properties of undefined (reading 'getElementsByTagName')
codice:
function mostra(i) {
let j = Number(i); // conversione fatta caso mai prendesse i come stringa in dvd[]
document.getElementById("mostraDVD").innerHTML = "Titolo: " +
dvd[j].getElementsByTagName("titolo")[0].childNodes[0].nodeValue + "<br />Regista: " +
dvd[j].getElementsByTagName("regista")[0].childNodes[0].nodeValue + "<br />Genere: " +
dvd[j].getElementsByTagName("genere")[0].childNodes[0].nodeValue + "<br />Anno: " +
dvd[j].getElementsByTagName("anno")[0].childNodes[0].nodeValue;
}
dvd è il responseXML sui tag DVD, correttamente funzionante per codici simili ma senza la tabella interattiva al click (DVD navigabili con button o tabella caricata senza eventi annessi...).