Имя поля не foo
, это foo[]
. Вы можете использовать attributeStartsWith селектор:
$("input[name^='foo']:checked:enabled",'#myform');
В идеале, вы бы быть в состоянии сделать это:
$("input[name='foo[]']:checked:enabled",'#myform');
Но this answer объясняет, JQuery использует это, чтобы разобрать value
часть условия attr=value
:
(['"]*)(.*?)\3|)\s*\]
\ 3 является группой, содержащей отверстие кавычки, которым, как правило, разрешено быть несколько открывающих котировок, или вообще не открывать кавычки. . *? затем может анализировать любой символ, включая кавычки, пока он не ударит по первому символу ']', заканчивая совпадение. Не существует резервных копий специальных символов CSS с обратной косой чертой, поэтому вы не можете сопоставить произвольное строковое значение в jQuery.
Другими словами, как только jQuery попадает в первый ]
, он считает, что значение закончено. Таким образом, вы застряли в startWith или используете чистые элементы DOM, так как этот ответ также объясняет.
супер пупер ВАЖНО EDIT:
Эта ошибка исправлена, по-видимому. Вы должны иметь возможность использовать код, который я назвал «идеальным», выше.
Umn, что у вас там работает просто отлично, просто использовать двойные кавычки вокруг вашего выбора. :) – cgp
Да; помните, что мой первоначальный ответ - не лучший способ сделать это. У jQuery были проблемы с скобками в селекторе, но это было исправлено, поэтому вы должны иметь возможность сохранить то, что у вас есть, просто используйте двойные кавычки вокруг селектора. –