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');

4 ответов


имя поля не foo, это foo[]. Вы можете использовать attributeStartsWith селектор:

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

в идеале, вы могли бы сделать это:

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

, а как ответ объясняет, jQuery использует это для разбора value часть attr=value состояние:

(['"]*)(.*?)|)\s*\]

\3 - группа, содержащая открывающие кавычки, которым, как ни странно, разрешено быть несколькими открывающими кавычками или без открытия цитаты вообще. Этот.*? затем можно разобрать любой символ, включая кавычки, пока он не попадет в первый символ']', заканчивая матч. Нет положения для специальных символов CSS с обратной косой чертой, поэтому вы не можете сопоставить произвольное строковое значение в jQuery.

другими словами, как только jQuery попадает в первый ] он думает, что значение закончилось. Таким образом, вы застряли с startsWith или с использованием чистых элементов DOM, поскольку этот ответ также объясняет.

СУПЕР ПУПЕР ВАЖНОЕ РЕДАКТИРОВАНИЕ:
По-видимому, эта ошибка исправлена. Вы должны иметь возможность использовать код, который я описал как" идеальный", выше.


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

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

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

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

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

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

посмотреть: http://dev.jquery.com/ticket/3443


Я считаю, что это звучит примерно так:

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

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

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