Ich habe eine pure CSS accordion und möchte einige Funktionalität für Leute, die JavaScript aktiviert haben, hinzufügen. Das CSS-Akkordeon arbeitet mit der Pseudo-Klasse checked. Die neue Funktionalität: Wenn eine bereits aktive Schaltfläche erneut geklickt wird, sollten alle zusammenbrechen. Bitte keine JS-Bibliotheken wie jQuery.JS deaktivieren Radiobutton macht alle nicht änderbar
Es funktioniert das erste Mal, wenn Sie auf das anfänglich nicht kollabierte Element klicken. Aber dann scheinen alle Knöpfe .checked===true
zu erfüllen. Es ist nicht mehr möglich einen Artikel zu überprüfen.
Here is a JSFiddle und dies ist die JS (bitte siehe auch für dumme Fehler - ich JS Anfänger bin):
function uncheck() {
if(this.checked) {
this.checked = false;
}
}
var elements = document.getElementsByClassName("js-uncheck");
for (var i=0; i<elements.length; i++) {
elements[i].addEventListener("click", uncheck, false);
}
Ich bin auch offen für eine Checkbox Variation (bereits erfolglos um ein bisschen getestet) , solange nur ein Objekt gleichzeitig geöffnet ist (Radiobutton-ähnlich). Hier ist a Fiddle to play around mit Kontrollkästchen.
Dies funktioniert gut! ich werde ein Element standardmäßig aktiviert haben und die Klasse hinzufügen. So mehr oder weniger die Lösung nicht sich auf den ".checked" Status verlassen, aber durch eine separate Klasse markieren. Danke! – Stony
Nun, Sie können sich auf den .checked-Status verlassen, aber sehen Sie sich diesen Weg an ... das Problem ist, dass die Blöcke bereits geprüft sind, wenn Ihre Funktion ausgeführt wurde. Es ist also ein Henne-und-Ei-Problem, das zuerst kam - der Klick oder der Haken, um zu sehen, ob es angeklickt wurde ... im ursprünglichen Post, zu dem Zeitpunkt, an dem Sie geklickt haben, wurde immer geklickt - so haben Sie immer den Klick ausgeschaltet . Die Klasse ist eine Möglichkeit, sozusagen in die Vergangenheit zurückzukehren. – WEBjuju