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");
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 🙂
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.
140390 0 0 cookie-check Jquery wählen Sie alle aus, wenn nicht deaktiviert yes