2012-09-10 41 views

Respuesta

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

Sí, pero perder ': checked' del selector y hacer que la función de filtro'! This.disabled && this.checked' mejore el rendimiento mucho . – lonesomeday

+0

¿por qué exactamente? Pensaría que el motor selector lo haría más rápido que mi función. Sin embargo, es más fácil de entender, voy a editar mi respuesta. – Hoffmann

+0

Porque los navegadores no entienden ': checked', por lo que jQuery tiene que hacerlo solo, lo que es lento. Agregar una verificación booleana extra es mucho más rápido. – lonesomeday

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

Aquí hay una fiddle

+0

tienes que usar la función .filter() como en mi respuesta – Hoffmann

25

así:

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

Esto encuentra campos que son input s, con el tipo checkbox, que se comprueban, y no deshabilitado. Si esto no funciona, se debe utilizar un control de atributo:

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

O, como @lonesomeday astutamente señaló, se puede combinar en un solo selector:

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

He creado una prueba de concepto in this fiddle.

+5

No tiene sentido usar dos selectores separados aquí. También puede hacer 'input [type =" checkbox "]: checked: not ([disabled])'. – lonesomeday

2

Puede utilizar este selector ..

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

Comprobar Esta FIDDLE

0

¿qué tal $("input[type='checkbox']:checked:enabled")?

Cuestiones relacionadas