Jquery wählen Sie alle aus, wenn nicht deaktiviert

Lesezeit: 3 Minuten

Ich verwende das folgende Skript, um alle Kontrollkästchen mit einer bestimmten Klasse auszuwählen.

$(document).ready(function(){ // 1
    // 2
    $(':checkbox.selectall').on('click', function(){
        // 3
        $(':checkbox[class="+ $(this).data("checkbox-name') + ']').prop("checked", $(this).prop("checked"));
        $(':checkbox[class="+ $(this).data("checkbox-name') + ']').trigger("change");
    });

});

Ich habe jedoch ein Problem, da das Kontrollkästchen „Alle deaktivieren/auswählen“ deaktivierte Kontrollkästchen deaktivieren/auswählen kann.

Ich habe das versucht

$(document).ready(function(){ // 1
    // 2
    $(':checkbox.selectall').on('click', function(){
        // 3
        $(':checkbox[class="+ $(this).data("checkbox-name') + !$(:disabled) + ']').prop("checked", $(this).prop("checked"));
        $(':checkbox[class="+ $(this).data("checkbox-name') + !$(:disabled) + ']').trigger("change");
    });

});

Aber es funktioniert nicht. Ich habe eine jsfiddle erstellt, um das Problem zu demonstrieren http://jsfiddle.net/e67Fv/

Hm … interessanter Versuch, aber Sie können kein jQuery-Objekt in einem Selektor verwenden, da der Selektor nur eine einfache Zeichenfolge ist.

Der Selektor zum Ausschließen der deaktivierten Elemente wäre :not(:disabled)Ihr Code sollte also lauten:

$(document).ready(function(){
  $(':checkbox.selectall').on('click', function(){
    $(':checkbox[class="+ $(this).data("checkbox-name') + ']:not(:disabled)').prop("checked", $(this).prop("checked"));
    $(':checkbox[class="+ $(this).data("checkbox-name') + ']:not(:disabled)').trigger("change");
  });
});

Beachten Sie, dass Sie Anrufe verketten können, damit Sie die Elemente nicht zweimal auswählen müssen:

$(document).ready(function(){
  $(':checkbox.selectall').on('click', function(){
    $(':checkbox[class="+ $(this).data("checkbox-name') + ']:not(:disabled)').prop("checked", $(this).prop("checked")).trigger("change");
  });
});

Verwenden Sie eine Kombination aus .not() Funktion u :disabled Selektor, um diese auszuschließen.

$(':checkbox[class="+ $(this).data("checkbox-name') + ']').not(':disabled').prop("checked", $(this).prop("checked"));
$(':checkbox[class="+ $(this).data("checkbox-name') + ']').not(':disabled').trigger("change");

.not() existiert auch als Selektor als :not() und könnte wie folgt verwendet werden:

 $(':checkbox[class="+ $(this).data("checkbox-name') + ']:not(:disabled)').prop("checked", $(this).prop("checked"));
 $(':checkbox[class="+ $(this).data("checkbox-name') + ']:not(:disabled)').trigger("change");

Benutzeravatar von sergiocruz
sergiocruz

Hier ist, was ich normalerweise mache:

$(function(){
    $(".selectall").live('change', function(){
        if($(this).is(":checked"))
        {
            $("input:checkbox:not(:disabled)." + $(this).data('checkbox-name')).prop("checked", "true");
        }
        else
        {
            $("input:checkbox:not(:disabled)." + $(this).data('checkbox-name')).prop("checked", "false");
        }
    });
});

Ich hoffe, es hilft 🙂

  • Hm … Hast du die Frage gelesen? Dies macht nur einen Teil dessen, was der ursprüngliche Code getan hat. Es gibt nichts darin, um die deaktivierten Kontrollkästchen zu behandeln.

    – Gufa

    12. Juli 2012 um 17:23 Uhr


  • Entschuldigung, ich habe vergessen, das in den Code aufzunehmen, ich habe gerade meine Antwort bearbeitet und hinzugefügt: nicht (: deaktiviert) …

    – sergiocruz

    12. Juli 2012 um 17:33 Uhr

Benutzeravatar von Rune FS
Rune FS

Dies macht nicht dasselbe wie Ihr ursprünglicher Code. Es würde nur für diejenigen, die nicht geändert wurden, eine Änderung auslösen. Ich bin davon ausgegangen, dass Sie Veränderungen auslösen wollten, nachdem Sie sich verändert hatten

$(':checkbox.selectall').on('click', function(){
        $(':checkbox .'+ $(this).data('checkbox-name')).not(':disabled').prop("checked", $(this).prop("checked")).trigger("change");
    });

jQuery unterstützt :enabled seit v1.0

$('input:checkbox:enabled')

ist das gleiche wie

$('input:checkbox:not(:disabled)')

und hilft, die zu vermeiden :not() Wähler.

1403900cookie-checkJquery wählen Sie alle aus, wenn nicht deaktiviert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy