Ho cercato di imparare javascript rifattorizzando alcuni esempi di Jquery in un libro in javascript. Nel seguente codice aggiungo un listener di clic a una scheda e lo trasformo in attivo quando l'utente fa clic sulla scheda.Cercando di dare un senso a "questo" nel mio codice javascript (una cosa funziona, l'altra no)
var tabs = document.querySelectorAll(".tabs a span");
var content = document.querySelectorAll("main .content li");
for (var tabNumber = 0; tabNumber <= 2; tabNumber++) {
tabs[tabNumber].addEventListener("click", function (event) {
for (var i = 0; i < tabs.length; i++) {
tabs[i].classList.remove("active");
}
tabs[tabNumber].classList.add("active");
for (var i = 0; i < content.length; i++) {
content[i].innerHTML = "";
}
event.preventDefault();
});
}
Ciò restituisce un undefined error
quando l'eseguo. Tuttavia, ho provato a sostituire tabs[tabNumber].classList.add("active")
con this.classList.add("active")
e ha funzionato.
Perché il codice precedente non funziona? Per quanto posso vedere si riferiscono alla stessa cosa, e tabs[tabNumber]
dovrebbe funzionare poiché a quel punto nel codice è tabs[0]
.
Se console.log (tabNumber) all'interno del gestore di eventi, troverai che è 3, indipendentemente dall'elemento su cui hai fatto clic. – nnnnnn
usa 'let' per i cicli il più possibile, ma il problema può essere risolto chiudendo o nel punto in cui lo fai riferimento nel tuo codice JS. – Gary