2012-09-10 14 views

risposta

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

Sì, ma perdere ': checked' dal selettore e rendere la funzione di filtro'! This.disabled && this.checked' migliorerebbe le prestazioni molto . – lonesomeday

+0

perché esattamente? Penserei che il motore di selezione lo farebbe più veloce della mia funzione. Tuttavia è più facile da capire, modifico la mia risposta. – Hoffmann

+0

Poiché i browser non comprendono ': checked', quindi jQuery deve farlo da solo, che è lento. Aggiungere un controllo booleano extra è molto più veloce. – lonesomeday

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

Ecco un fiddle

+0

devi usare la funzione .filter() come nella mia risposta – Hoffmann

25

Come così:

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

Questo trova campi che sono input s, con il tipo di checkbox, che vengono controllati, e non disabili. Se questo non funziona, è necessario utilizzare un controllo di attributo:

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

O, come @lonesomeday acutamente sottolineato, è possibile combinare in un selettore:

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

ho messo insieme un proof-of-concept in this fiddle.

+5

Non ha senso usare due selettori separati qui. Si può anche fare 'input [type =" checkbox "]: checked: not ([disabled])'. – lonesomeday

2

È possibile utilizzare questo selettore ..

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

controllare questo FIDDLE

0

come su $("input[type='checkbox']:checked:enabled")?

Problemi correlati