Die tl: dr-Version dieser Frage ist einfach. Ich habe eine Reihe von Kontrollkästchen und möchte diejenigen, die den Status aktiviert haben, als nicht markiert markieren, nicht markiert, um sie zu aktivieren. Unten ist mein Versuch, das zu lösen. Wir verwenden jQuery nicht nur JavaScript.Code zum Markieren von Checkboxen, die sich geändert haben
Ich habe eine Anwendung, die eine Tabelle anzeigt, die eine Liste von Elementen aus dem DB zeigt, die entweder aktiv oder inaktiv sind. Der aktive Status wird mit einem Kontrollkästchen angezeigt, das aktiviert ist, wenn das Element aktiv ist, und deaktiviert, wenn es inaktiv ist.
Ein Benutzer der Anwendung wird dann Änderungen vornehmen, markierte Kontrollkästchen deaktivieren und nicht markierte Kontrollkästchen aktivieren, um den Status der Elemente zu ändern, was er will, und dann eine Aktualisierungsschaltfläche drücken, um diese Änderungen in der DB zu speichern.
Ich entschied, dass es hilfreich wäre, dem Benutzer anzuzeigen, welche Elemente er geändert hatte.
Also habe ich jedes Kontrollkästchen innerhalb eines div platziert, das eine Funktion ausführt, die den Zellhintergrund in eine andere Farbe ändert, um jene Elemente zu markieren, die sich von dem geändert haben, was sie ursprünglich waren. Das war in Ordnung, wenn sie direkt auf das Kontrollkästchen treffen, ändern sich sowohl die Farbe als auch der Prüfstatus wie erwartet, aber wenn Sie außerhalb des Feldes klicken, aber immer noch in der Tabellenzelle, ändert sich die Farbe, aber nicht der Prüfstatus.
Also, ich habe einen Code hinzugefügt, um die Farbe zu ändern, um es auch das Kontrollkästchen zu aktivieren. Dies funktioniert gut, wenn sie außerhalb des Kontrollkästchens klicken, aber immer noch in der Zelle. Wenn sie jedoch direkt auf das Kontrollkästchen klicken, wird sowohl die Farbänderungsfunktion ausgeführt, die den Boxstatus und die Farbe ändert, als auch die Standardstatusänderung für das Anklicken eines Kontrollkästchens. Dies führt dazu, dass der Prüfstatus in den ursprünglichen Status zurückkehrt.
Die Frage ist, wie kann ich nur den einen oder anderen zum Laufen bekommen? Gibt es einen Standardweg, um den ich mir nicht bewusst bin? Vielleicht sollte ich kein Kontrollkästchen verwenden?
Dank im Voraus
Unten finden Sie die Funktion:
function toggleCheckboxBackground(clickedItem){
if(clickedItem.style.background == 'red'){
clickedItem.style.background = '';
} else {
clickedItem.style.background = 'red';
}
var cboxes = clickedItem.getElementsByTagName('input');
if(cboxes[0].type === 'checkbox'){
if(cboxes[0].checked){
cboxes[0].checked = false;
}
else {
cboxes[0].checked = true;
}
}
}
Sie können stattdessen die Anfangswerte statisch angeben; nicht so dynamisch, beinhaltet aber weniger Codierung. –
Sie schlagen also vor, eine weitere Spalte mit dem Status (aktiv/inaktiv) hinzuzufügen und dann das Kästchen zu aktivieren, um es zu ändern? Ich kann sehen, wie das funktional funktioniert, aber ich denke, dass es für die Benutzer nicht intuitiv genug ist. –
So ähnlich.Zum Beispiel hatte ich eine Tabelle mit Optionsfeldern, bei denen alle ursprünglich überprüften Schaltflächen einen dunkelblauen Hintergrund hatten, die anklickbaren Schaltflächen hellblau und die nicht anklickbaren Schaltflächen rot waren. –