Ich bin auf ein Problem gestoßen. Hier ist eine kurze Erklärung.
Ich habe 12 Kontrollkästchen auf einem Standardformular. Was ich tun muss, ist, jeden von ihnen zu durchlaufen und zu erfahren, welche aktiviert und welche nicht aktiviert sind.
Auf diese Weise 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.
$('input[type=checkbox]').each(function () {
if (this.checked) {
console.log($(this).val());
}
});
Es funktioniert perfekt, außer dass nur die geprüften zurückgebracht werden, nicht alle.
Entschuldigung für die neue Frage. Ich bin ein bisschen neu in jquery.
Antworten:
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 würde jedoch @SLaks zustimmen. Ich denke, Sie sollten die Struktur, in der Sie dies speichern, in Ihrer Datenbank überdenken.
EDIT : Entschuldigung, ich habe das 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);
quelle
1
s und0
s.Verwenden von Selektoren
Sie können alle aktivierten Kontrollkästchen wie folgt erhalten:
var boxes = $(":checkbox:checked");
Und alles nicht geprüft wie folgt:
var nboxes = $(":checkbox:not(:checked)");
Sie können lediglich eine dieser Sammlungen durchlaufen und diese Namen speichern. Wenn etwas fehlt, wissen Sie, dass es entweder überprüft wurde oder nicht. Wenn Sie in PHP eine Reihe von Namen hatten, die überprüft wurden, können Sie einfach eine
in_array()
Anfrage stellen, um zu erfahren, ob ein bestimmtes Kontrollkästchen zu einem späteren Zeitpunkt aktiviert werden soll oder nicht.Serialisieren
jQuery verfügt außerdem über eine Serialisierungsmethode , mit der der Status Ihrer Formularsteuerelemente beibehalten wird. Das auf der Website von jQuery bereitgestellte Beispiel lautet beispielsweise wie folgt:
single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2
Auf diese Weise können Sie auch die Informationen behalten, auf die Elemente überprüft wurden.
quelle
Sie können alle Kontrollkästchen durch Schreiben durchlaufen
$(':checkbox').each(...)
.Wenn ich Ihre Frage richtig verstehe, suchen Sie nach folgendem 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,
oder0,
zu einer Zeichenfolge hinzu.quelle
Ich glaube, es wurde nicht genügend Zeit darauf verwendet, die im ursprünglichen Beitrag angesprochenen Schemaüberlegungen zu berücksichtigen. Also, hier ist etwas für Neulinge zu beachten.
Angenommen, Sie haben diese Lösung entwickelt. Alle Ihre einfachen Werte werden zu einem einzigen Wert zusammengefasst und in der Datenbank gespeichert. Sie sparen in der Tat [ein wenig] Speicherplatz in Ihrer Datenbank und etwas Zeit beim Codieren.
Betrachten wir nun, dass Sie die häufige und einfache Aufgabe ausführen müssen, ein neues Kontrollkästchen zwischen den aktuellen Kontrollkästchen 3 und 4 hinzuzufügen. Ihr Entwicklungsmanager, Kunde, was auch immer dies erwartet, ist eine einfache Änderung.
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 oder ein anderer Zeichenfolgentyp ist, sodass es auch in Ordnung sein sollte.
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 alles wieder aus der Datenbank, verarbeiten Sie es, um einen Standardwert für die neue Fragenposition hinzuzufügen, und speichern Sie es dann wieder in der Datenbank? Was passiert, wenn Sie im Abstand von einer Woche oder einem Monat mehrere neue Werte haben? Was ist, wenn Sie die Standorte verschieben und jQuery sie in einer anderen Reihenfolge verarbeitet? Alle Ihre Daten sind abgespritzt und müssen erneut verarbeitet werden, um sie neu anzuordnen.
Das gesamte Konzept, KEINE enge Schlüssel-Wert-Beziehung bereitzustellen, ist ludacris und wird Sie eher früher als später in Schwierigkeiten bringen. Für diejenigen unter Ihnen, die dies in Betracht ziehen, bitte nicht. Die anderen Vorschläge für Schemaänderungen sind in Ordnung. Verwenden Sie eine untergeordnete Tabelle, mehr Felder in der Haupttabelle, eine Frage-Antwort-Tabelle usw. Speichern Sie nur keine nicht beschrifteten Daten, wenn sich die Struktur dieser Daten ändern kann.
quelle
$.extend($.expr[':'], { unchecked: function (obj) { return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); } }); $("input:checked") $("input:unchecked")
quelle