Jquery - Wie kann ich überprüfen, ob alle Checkboxen deaktiviert sind?
Für einige Grund, warum mein code nicht funktioniert?! Ich brauche zu überprüfen Kontrollkästchen, wenn Sie alle sind "deaktiviert", dann aktivieren Sie versteckte Feld und Wert senden db, so kann ich erkennen, dass die Checkboxen wurden nicht aktiviert.
Frage 1: Warum ist nicht mein jquery-code arbeiten?
Frage 2: ich brauche die Aufzeichnung aktiviert oder deaktiviert werden Werte an die DB. Mein plan ist es, zu überprüfen, wenn keine Auswahl in php. Ist das eine gute Praxis?
HTML
<tr class="more_info">
<th valign="top">Other options:</th>
{foreach from=$HTML_cOPTIONS key=dbname item=optname}
{if ! empty($CARINFO[car].{$dbname})}
<td><input type="checkbox" id="forced_checkbox" name="c_options[]" value="{$dbname}" checked/> {$optname} </br></td>
{else}
<td><input type="checkbox" id="forced_checkbox" name="c_options[]" value="{$dbname}"/> {$optname} </br></td>
{/if}
{/foreach}
<input type="hidden" id="forceSendCheckBox" name="c_options[]" value="nocheckboxes"/>
<input type="button" value="Check" id="check" />
</tr>
Jquery
$('#check').bind('click',function()
{
if ($('#forced_checkbox').filter(':not(:checked)').length == 0) {
console.log('at least one checked');
$("#forceSendCheckBox").prop('disabled',true);//do not send this field to DB
} else {
console.log('nothing checked');
$("#forceSendCheckBox").prop('disabled',false);//send empty checkboxes
}
});
UPDATE
Hier ist ein Turnschuh, es scheint immer noch kaputt zu sein. :-/
- Warum hat Ihr den Titel sagen, dass Sie brauchen, um zu überprüfen, ob alle aktiviert sind, aber deine Beschreibung sagt müssen Sie Fragen, wenn alle deaktiviert sind?
- Sie haben kein element
id="check"
. - Zug, es war ein Tippfehler. Sie haben über 2000 rep, und konnte Sie nicht Bearbeiten, ein Tippfehler?! Es nahm Sie mehr zu kommentieren.
- Ich wusste nicht, was Sie wollten. Die meisten Menschen bieten würde, eine danke für den Hinweis auf den Widerspruch. Schließlich, Ihre Frage liegt in Ihrer Verantwortung, nicht meine.
- ...und nur damit Sie es wissen, dieser code:
.filter(':not(:checked)').length == 0
ist, gepaart mit dieser Meldung:console.log('at least one checked')
ist, scheint seltsam. Wenn es0
nicht angekreuzte Kästchen, dann einer wäre, dass"all are checked"
statt"at least one checked"
. Also, wenn Sie wollen, um zu sehen, wenn alle "deaktiviert", dann sollten Sie das tun.filter(":checked").length == 0
. Oder wenn Sie wissen wollten, wenn mindestens eine aktiviert ist, dann:.filter(":checked").length
- Zug +1 für die Erklärung
- Froh, dass es geholfen hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IDs müssen eindeutig sein. Die Verwendung einer Klasse statt.
In Ihrer Geige, Sie hatten mehrere Probleme. Erste, Sie vergessen haben, wählen Sie das jQuery-framework aus dem Menü, damit keines der jQuery-code gearbeitet. Zweitens, ändern Sie die filter aus
not(:checked)
zu(:checked)
, aber nicht ändern== 0
zu> 0
. Dritte, ohne dienot
Sie sollte nicht Klammern um den filter-Wahlschalter. Viertens, Sie versucht, die Nachricht anzeigen, die in ein input-Feld mit.text()
, aber die richtige Methode ist.val()
.Hier der korrigierte code:
FIDDLE
Als Barmar erwähnt, die IDs müssen eindeutig sein.
Nächstes verwenden
.on()
statt.bind()
- ähnliche syntax, so einfach zu tun. (.binden ist veraltet)Aber, um Ihre Frage zu beantworten, können Sie schnell entdecken, welche Checkboxen wurden nicht geprüft, indem Sie alle Kontrollkästchen deaktiviert und Durchlaufen werden.
Wenn Sie brauchen, um eine Liste zu erstellen, welche Checkboxen wurden nicht aktiviert, dann müssen Sie etwas besonderes jeder (wenn jeder Mann im Raum wird mit dem Namen 'Bob', dann machen Sie eine nützliche Liste von all den Männern mit braunen Haaren wird schwierig sein). Verwenden Sie die ID, attr, für, dass, wie im jsFiddle Beispiel unten.
jsFiddle hier
Hier ist eine erweiterte jsFiddle Beispiel , das veranschaulicht, wie Sie die Liste der ungeprüften Checkboxen in ein verstecktes Feld, wie gewünscht, in Ihrem Beitrag.
Bezug auf Ihre jsFiddle, werden die folgenden Dinge benötigt Anpassung:
Siehe überarbeitet jsFiddle
Nutzung der
.on()
syntax. Verwenden.on(document)
oder.on(body)
statt:$('document').on('action', '#elementID', function() { //Do stuff here });
Um interate durch die Sammlung von ungeprüften Objekten, die Sie verwenden sollten, jQuery
.each()
Methode.$('.forced_checkbox').filter(':not(:checked)').each(function() { //Do stuff });
Hoffe, das hilft.