JQuery: выбор флажка установлен
Предположим, у меня есть следующий HTML-код:
<form id="myform">
<input type='checkbox' name='foo[]'/> Check 1<br/>
<input type='checkbox' name='foo[]' checked='true'/> Check 2<br/>
<input type='checkbox' name='foo[]'/> Check 3<br/>
</form>
Теперь, как мне выбрать проверенные поля ввода с именем 'foo []'?
Это моя попытка, но она не работает:
$("#myform input[name='foo']:checked:enabled");
Ответы
Ответ 1
Название поля не foo
, это foo[]
. Вы можете использовать селектор attributeStartsWith :
$("input[name^='foo']:checked:enabled",'#myform');
В идеале вы могли бы сделать это:
$("input[name='foo[]']:checked:enabled",'#myform');
Но, как объясняет этот ответ, jQuery использует это для анализа части value
условия attr=value
:
(['"]*)(.*?)\3|)\s*\]
\ 3 - группа, содержащая начальные кавычки, которые странно могут быть множественными открывающими кавычками или вообще не открывать кавычки.. *? затем может анализировать любой символ, включая кавычки, пока он не достигнет первого символа,], заканчивая совпадение. Для специальных символов CSS с обратной косой чертой не предусмотрено, поэтому вы не можете сопоставить произвольное строковое значение в jQuery.
Другими словами, как только jQuery достигает первого ]
, он думает, что значение закончено. Таким образом, вы застряли с StartSith или с использованием чистых элементов DOM, как объясняется в этом ответе.
ВАЖНОЕ РЕДАКТИРОВАНИЕ SUPER DUPER:
Эта ошибка исправлена, по-видимому. Вы должны быть в состоянии использовать код, который я описал как "идеальный" выше.
Ответ 2
Вы должны указать атрибут при выборе и включении []
:
$("#myform input[name='foo[]']:checked:enabled");
Ответ 3
На самом деле, у вас есть работы просто отлично, просто используйте двойные кавычки и включайте скобки, чтобы они могли соответствовать.
$("#myform input[name='foo[]']:checked:enabled");
Вы можете увидеть это в действии здесь:
http://jsbin.com/oyoro
Обратите внимание, что в прошлом у jQuery возникали проблемы с помощью скобок, что может объяснить много путаницы вокруг необходимости экранирования. Я знаю, что у меня была проблема с скобками и просто цитированием.
Смотрите: http://dev.jquery.com/ticket/3443
Ответ 4
Я считаю, что это происходит примерно так:
$("input #foo[] :checked");
EDIT:
Комментарий правильный. Я должен был пойти с моим первым ответом.:) На этот раз я собираюсь использовать "^".
$("input[name^=foo] :checked");