JQuery: установка флажка - PullRequest
       19

JQuery: установка флажка

34 голосов
/ 14 апреля 2009

Предположим, у меня есть следующий 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');

Ответы [ 4 ]

51 голосов
/ 14 апреля 2009

Имя поля не 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 :
Эта ошибка исправлена, по-видимому. Вы должны быть в состоянии использовать код, который я описал как «идеальный», выше.

5 голосов
/ 14 апреля 2009

Вы должны указать атрибут при выборе и включить []:

$("#myform input[name='foo[]']:checked:enabled");
1 голос
/ 14 апреля 2009

На самом деле, то, что у вас работает, прекрасно работает, просто используйте двойные кавычки и включайте скобки, чтобы они могли совпадать.

 $("#myform input[name='foo[]']:checked:enabled");

Вы можете увидеть это в действии здесь: http://jsbin.com/oyoro

Обратите внимание, что в прошлом у jQuery были проблемы с скобками, что может объяснить большую путаницу вокруг необходимости побега. Я знаю, что у меня были проблемы с квадратными скобками и я просто цитировал.

См .: http://dev.jquery.com/ticket/3443

0 голосов
/ 14 апреля 2009

Я считаю, что это выглядит примерно так:

$("input #foo[] :checked");

EDIT: Комментатор прав. Я должен был пойти с моим первым ответом. :) На этот раз я собираюсь использовать "^".

$("input[name^=foo] :checked");
...