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