J'ai lu certaines des réponses ici similaires à ma question, mais je ne comprends toujours pas ce qui se passe.
J'ai cet extrait JS: p>
<div class="panel controls">
<ul>
<li>
<button class="btn btn-pepperonni active">Pepperonni</button>
</li>
<li>
<button class="btn btn-mushrooms active">Mushrooms</button>
</li>
<li>
<button class="btn btn-green-peppers active">Green peppers</button>
</li>
<li>
<button class="btn btn-sauce active">White sauce</button>
</li>
<li>
<button class="btn btn-crust active">Gluten-free crust</button>
</li>
</ul>
</div>
3 Réponses :
Supprimez votre fonction RenderButTons et bascule la classe "Active" une fois que vous cliquez sur le bouton tel que ceci sur chaque ingrédient: P> document.querySelector('.btn.btn-pepperonni').onclick = function() {
state.pepperonni = !state.pepperonni;
renderEverything()
this.classList.toggle("active");
}
Désolé, voici le snippet runnable: Codepen.io/pablinx/pen/ojpavzl
Ok j'ai trouvé le problème dans votre code. J'espère que cette solution simple aide.
Votre JS doit être chargé à la fin de votre HTML. Votre HTML chargera le contenu de haut en bas. Donc, votre scierie veut accéder aux éléments "BTN", qui sont à l'heure actuelle non générés.
premier HTML, puis JS. P>
Pour une telle fonction courte, vous pouvez utiliser une fonction en ligne ci-dessous. p>
Non, désolé, le HTML est correctement écrit, mais je viens de partager ici les extraits qui comptent pour la question. Le code complet est ici: Codepen.io/pablinx/pen/ojpavzl
Comme les réponses précédentes ont montré comment corriger votre code d'origine, j'ai essayé de trouver une version simplifiée de ce que vous voulez faire.
Dans ma solution, j'utilise une "liaison d'événement déléguée": l'événement de clic est lié au parent p> BTN code>. Cette approche fonctionnera sur des éléments qui n'ont même pas été créés au moment de la liaison. Et il est plus "léger", car il n'y a qu'une seule liaison. P> <div class="panel controls">
<ul>
<li>
<button class="btn btn-pepperonni active">Pepperonni</button>
</li>
<li>
<button class="btn btn-mushrooms active">Mushrooms</button>
</li>
<li>
<button class="btn btn-green-peppers active">Green peppers</button>
</li>
<li>
<button class="btn btn-sauce active">White sauce</button>
</li>
<li>
<button class="btn btn-crust active">Gluten-free crust</button>
</li>
</ul>
</div>
Je ne peux pas reproduire votre problème. Pouvez-vous convertir votre code en un extrait annulable?
Désolé, voici le snippet runnable: Codepen.io/pablinx/pen/ojpavzl