webentwicklung-frage-antwort-db.com.de

Durchlaufen Sie die Checkboxen und zählen Sie jedes Kontrollkästchen

Ich bin auf ein Problem gestoßen. Hier ist eine kurze Erklärung.

Ich habe 12 Kontrollkästchen in einem Standardformular. Was ich tun muss, ist eine Schleife durch jeden von ihnen, und ich lerne, welche überprüft werden und welche nicht. 

Damit kann ich dann eine Zeichenfolge erstellen, die ich dann in ein Datenbankfeld eingebe. Hier ist ein Beispiel. 

(Check1 - geprüft)
(Check2 - nicht geprüft)
(Check3 - geprüft)

1,0,1

Bisher habe ich diesen Code bekommen. 

$('input[type=checkbox]').each(function () {
           if (this.checked) {
               console.log($(this).val()); 
           }
});

Es funktioniert einwandfrei, außer dass es nur die überprüften, nicht alle zurückbringt. 

Entschuldigung für die neue Frage. Ich bin ein bisschen neu in jquery.

67
Richard M

Um eine Ergebniszeichenfolge genau in dem von Ihnen angezeigten Format zu erstellen, können Sie Folgendes verwenden:

var sList = "";
$('input[type=checkbox]').each(function () {
    sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")";
});
console.log (sList);

Ich stimme jedoch @SLaks zu. Ich denke, Sie sollten die Struktur, in der Sie diese in Ihrer Datenbank ablegen werden, überdenken.

EDIT: Entschuldigung, ich habe das von Ihnen gesuchte Ausgabeformat falsch gelesen. Hier ist ein Update:

var sList = "";
$('input[type=checkbox]').each(function () {
    var sThisVal = (this.checked ? "1" : "0");
    sList += (sList=="" ? sThisVal : "," + sThisVal);
});
console.log (sList);
109
Ed Schembor

Selektoren verwenden

Sie können alle markierten Kontrollkästchen wie folgt erhalten:

var boxes = $(":checkbox:checked");

Und alle nicht so geprüft:

var nboxes = $(":checkbox:not(:checked)");

Sie können lediglich eine dieser Sammlungen durchlaufen und diese Namen speichern. Wenn etwas fehlt, wissen Sie, dass entweder geprüft wurde oder nicht. Wenn Sie in PHP ein Array von Namen haben, die geprüft wurden, könnten Sie einfach eine in_array() - Anforderung ausführen, um zu erfahren, ob ein bestimmtes Kontrollkästchen zu einem späteren Zeitpunkt aktiviert werden soll.

Serialisieren

jQuery hat auch eine serialize-Methode , die den Status Ihrer Formularsteuerelemente beibehält. Das auf der jQuery-Website bereitgestellte Beispiel lautet beispielsweise:

single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2

Auf diese Weise können Sie auch die Informationen behalten, für die Elemente geprüft wurden.

58
Sampson

Sie können alle Kontrollkästchen durchlaufen, indem Sie $(':checkbox').each(...) schreiben.

Wenn ich Ihre Frage richtig verstanden habe, suchen Sie nach dem folgenden Code:

var str = "";

$(':checkbox').each(function() {
    str += this.checked ? "1," : "0,";
});

str = str.substr(0, str.length - 1);    //Remove the trailing comma

Dieser Code durchläuft alle Kontrollkästchen und fügt entweder 1, oder 0, zu einer Zeichenfolge hinzu.

15
SLaks

Ich denke nicht, dass genug Zeit auf die im ursprünglichen Beitrag angesprochenen Schema-Überlegungen geachtet wurde. Hier ist also für Neulinge etwas zu beachten.

Nehmen wir an, Sie haben diese Lösung entwickelt. Alle Ihre untergeordneten Werte werden in einem einzigen Wert zusammengefasst und in der Datenbank gespeichert. Sie sparen tatsächlich [etwas] Speicherplatz in Ihrer Datenbank und sparen Zeit.

Lassen Sie uns nun berücksichtigen, dass Sie häufig und einfach das Hinzufügen eines neuen Kontrollkästchens zwischen den aktuellen Kontrollkästchen 3 und 4 durchführen müssen.

Sie fügen also das Kontrollkästchen zur Benutzeroberfläche hinzu (der einfache Teil). Ihr Schleifencode würde die Werte bereits verketten, unabhängig von der Anzahl der Kontrollkästchen. Sie stellen auch fest, dass Ihr Datenbankfeld nur ein varchar-Typ oder ein anderer Zeichenfolgentyp ist, also sollte es auch in Ordnung sein.

Was passiert, wenn Kunden oder Sie versuchen, die Daten vor der Änderung anzuzeigen? Sie serialisieren im Wesentlichen von links nach rechts. Jetzt sind die Werte nach 3 jedoch alle um 1 Zeichen versetzt. Was machen Sie mit all Ihren vorhandenen Daten? Schreiben Sie eine Anwendung, ziehen Sie sie zurück aus der Datenbank, verarbeiten Sie sie, um einen Standardwert für die neue Fragenposition hinzuzufügen, und speichern Sie sie dann wieder in der Datenbank. Was passiert, wenn Sie mehrere neue Werte pro Woche oder Monat haben? Was passiert, wenn Sie die Standorte verschieben und jQuery sie in einer anderen Reihenfolge verarbeitet? Alle Ihre Daten werden abgespritzt und müssen erneut verarbeitet werden, um sie neu zu ordnen.

Das ganze Konzept, KEINE enge Schlüsselwert-Beziehung zu schaffen, ist ludacris und wird Sie eher früher als später in Schwierigkeiten bringen. Für diejenigen von euch, die dies in Betracht ziehen, bitte nicht. Die anderen Vorschläge für Schemaänderungen sind in Ordnung. Verwenden Sie eine untergeordnete Tabelle, weitere Felder in der Haupttabelle, eine Frage-Antwort-Tabelle usw. Speichern Sie keine unbeschrifteten Daten, wenn sich die Struktur dieser Daten ändert.

0
Nathon