442 Stimmen

Kontrollkästchen ein/aus schalten

Ich habe die folgenden:

$(document).ready(function()
{
    $("#select-all-teammembers").click(function() {
        $("input[name=recipients\\[\\]]").attr('checked', true);
    });                 
});

Ich möchte die id="select-all-teammembers" wenn sie angeklickt wird, um zwischen angekreuzt und nicht angekreuzt zu wechseln. Ideen? die nicht Dutzende von Codezeilen sind?

800voto

Frédéric Hamidi Punkte 249635

Sie können schreiben:

$(document).ready(function() {
    $("#select-all-teammembers").click(function() {
        var checkBoxes = $("input[name=recipients\\[\\]]");
        checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    });                 
});

Vor jQuery 1.6, als wir nur attr() und nicht prop() schrieben wir früher:

checkBoxes.attr("checked", !checkBoxes.attr("checked"));

Aber prop() hat eine bessere Semantik als attr() wenn sie auf "boolesche" HTML-Attribute angewandt wird, daher wird sie in dieser Situation normalerweise bevorzugt.

0 Stimmen

@AnApprentice, tut mir leid, das ist das Gleiche, ich habe mich nur dumm angestellt ;)

0 Stimmen

Ich habe dies auch benutzt, um einzelne Kontrollkästchen ein- und auszuschalten! Danke für den fantastischen, kurzen und verständlichen Code!

5 Stimmen

Dies kann zu Problemen führen, da der Status vom ersten Status abhängt (wenn der Benutzer also den ersten Status prüft und dann die Umschaltfunktion verwendet, wird die Synchronisierung unterbrochen). Leicht gezwickt, so dass es den Status aus dem Toggle, nicht die erste Checkbox in der Liste basiert: $("input[name=recipients\[\]]").prop("checked", $(this).prop("checked"));

239voto

//this toggles the checkbox, and fires its event if it has    

$('input[type=checkbox]').trigger('click'); 
//or
$('input[type=checkbox]').click();

0 Stimmen

Funktioniert in Chrome 29, aber nicht in FF 17.0.7, kann das jemand bestätigen?

0 Stimmen

Ich bin schon so lange den Weg gegangen, die Eigenschaft zu ändern. Für mich ist dies ein großartiger und flexiblerer Ansatz für die Überprüfung und Deaktivierung von Checkbox-Elementen.

2 Stimmen

Unerwünschtes Ereignis wird ausgelöst.

74voto

Normadize Punkte 1146

Ich weiß, dass diese Frage alt ist, aber sie war insofern etwas zweideutig, als dass umzuschalten. kann bedeuten, dass jedes Kontrollkästchen seinen Zustand umschalten sollte, was auch immer das ist. Wenn Sie 3 angekreuzt und 2 nicht angekreuzt haben, dann würde das Umschalten die ersten 3 nicht angekreuzt und die letzten 2 angekreuzt machen.

Deshalb funktioniert keine der hier vorgestellten Lösungen, da alle Kontrollkästchen denselben Status haben, anstatt den Status jedes einzelnen Kontrollkästchens umzuschalten. Tun $(':checkbox').prop('checked') bei mehreren Kontrollkästchen ergibt das logische UND zwischen allen .checked binäre Eigenschaften, d.h. wenn eine dieser Eigenschaften nicht angekreuzt ist, ist der zurückgegebene Wert false .

Sie müssen Folgendes verwenden .each() wenn Sie die Zustände der einzelnen Kontrollkästchen tatsächlich umschalten wollen, anstatt sie alle gleich zu machen, z. B.

   $(':checkbox').each(function () { this.checked = !this.checked; });

Beachten Sie, dass Sie nicht brauchen $(this) innerhalb des Handlers als die .checked Eigenschaft ist in allen Browsern vorhanden.

6 Stimmen

Ja, das ist die richtige Antwort, um den Status aller Kontrollkästchen umzuschalten!

2 Stimmen

Größenordnungen schneller als Auslösen von Klick mit jQuery, wenn Sie eine Menge von Kontrollkästchen haben.

16voto

kst Punkte 1458

Hier ist eine weitere Möglichkeit, die Sie wünschen.

$(document).ready(function(){   
    $('#checkp').toggle(
        function () { 
            $('.check').attr('Checked','Checked'); 
        },
        function () { 
            $('.check').removeAttr('Checked'); 
        }
    );
});

2 Stimmen

@kst - Dies ist eine bessere Methode $('input[name=recipients\[\]]').toggle(this.checked); Vergessen Sie die Klassen.

13voto

Dblock247 Punkte 5530

Das ist der beste Weg, den ich mir vorstellen kann.

$('#selectAll').change(function () {
    $('.reportCheckbox').prop('checked', this.checked);
});

oder

$checkBoxes = $(".checkBoxes");
$("#checkAll").change(function (e) {
    $checkBoxes.prop("checked", this.checked);
});   

oder

<input onchange="toggleAll(this)">
function toggleAll(sender) {
    $(".checkBoxes").prop("checked", sender.checked);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X