2012-09-10 9 views

Antwort

5
$('input[type="checkbox"]').filter(function() { 
return !this.disabled && this.checked; 
}) 
+1

Ja, aber verlieren ': checked' aus dem Selektor und machen die Filterfunktion'! This.disabled && this.checked' würde die Leistung sehr verbessern . – lonesomeday

+0

warum genau? Ich würde denken, dass die Selektor-Engine es schneller als meine Funktion machen würde. Trotzdem ist es einfacher zu verstehen, ich werde meine Antwort bearbeiten. – Hoffmann

+0

Weil Browser '' checked' 'nicht verstehen, muss jQuery es selbst tun, was langsam ist. Das Hinzufügen einer zusätzlichen booleschen Überprüfung ist viel schneller. – lonesomeday

7
$('input[type="checkbox"]:checked').not(":disabled"); 

Hier ist ein fiddle

+0

müssen Sie die .filter() -Funktion wie in meiner Antwort verwenden – Hoffmann

25

Wie so:

$("input[type='checkbox']:checked").not(":disabled")... 

Dies findet Felder, die input s sind, mit Typ checkbox, die überprüft werden, und nicht gesperrt. Wenn dies nicht funktioniert, sollten Sie eine Attributprüfung verwenden:

$("input[type='checkbox']:checked").not("[disabled]")... 

Oder, wie @lonesomeday astutely darauf hingewiesen, können Sie es zu einem Selektor kombinieren:

$("input[type='checkbox']:checked:not(:disabled)")... 

ich zusammen habe ein Proof-of-Concept in this fiddle.

+5

Es macht keinen Sinn, hier zwei separate Selektoren zu verwenden. Sie können auch 'input [type =" checkbox "] eingeben: checked: not ([disabled])'. – lonesomeday

2

können Sie diesen Schalter verwenden ..

​$('input[type=checkbox]:checked:not(:disabled)')​ 

prüfen Dieses FIDDLE

0

wie etwa $("input[type='checkbox']:checked:enabled")?

Verwandte Themen