Подтвердить что ты не робот

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");
4b9b3361

Ответ 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");