El nombre del campo no es foo
, es foo[]
. Se podría utilizar el selector de attributeStartsWith:
$("input[name^='foo']:checked:enabled",'#myform');
Idealmente, usted sería capaz de hacer esto:
$("input[name='foo[]']:checked:enabled",'#myform');
Pero como explica this answer, jQuery utiliza esto para analizar la parte value
de la condición attr=value
:
(['"]*)(.*?)\3|)\s*\]
\ 3 siendo el grupo que contiene la abertura citas, que extrañamente pueden ser múltiples citas de apertura, o sin citas de apertura. Los .*? a continuación, puede analizar cualquier carácter, incluidas las comillas hasta que llegue al primer carácter ']', finalizando la coincidencia. No hay ninguna disposición para los caracteres especiales CSS de escape de barra invertida, por lo que no puede hacer coincidir un valor de cadena arbitrario en jQuery.
En otras palabras, tan pronto como jQuery golpea el primer ]
cree que el valor ha terminado. Así que estás atrapado con inicios con o usando elementos DOM puros, como esa respuesta también explica.
Super Duper EDITAR IMPORTANTE:
Este error se corrige, al parecer. Debería poder usar el código que describí como "ideal", arriba.
Umn, lo que tiene no funciona bien, sólo tiene que utilizar comillas dobles alrededor de su selector. :) – cgp
Sí; tenga en cuenta que mi respuesta inicial no es la mejor manera de hacerlo. jQuery solía tener problemas con los corchetes en el selector, pero esto se ha solucionado, por lo que debería poder conservar lo que tiene, simplemente use comillas dobles alrededor del selector. –