web-dev-qa-db-ja.com

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

フィールドの名前はfooではなく、foo[]です。 attributeStartsWith セレクターを使用できます。

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

理想的には、これを行うことができるでしょう:

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

しかし この答え が説明するように、jQueryはこれを使用してattr=value条件のvalue部分を解析します。

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

\ 3は、開始引用符を含むグループであり、奇妙なことに、複数の開始引用符が許可されるか、開始引用符がまったく許可されません。 。*?その後、最初の「]」文字にヒットするまで引用符を含む任意の文字を解析し、一致を終了できます。バックスラッシュをエスケープするCSSの特殊文字は用意されていないため、jQueryの任意の文字列値と一致させることはできません。

言い換えれば、jQueryが最初の]に到達するとすぐに、値が終わったと判断します。そのため、その答えも説明しているように、startsWithまたは純粋なDOM要素を使用する必要があります。

スーパーデュパーの重要な編集
このバグは明らかに修正されています。上記の「理想」として説明したコードを使用できるはずです。

53

[]を選択して含めるときは、属性を引用する必要があります。

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

実際には、あなたが持っているものはうまく動作し、二重引用符を使用し、括弧を含めて一致させることができます。

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

ここで実際に動作を確認できます: http://jsbin.com/oyoro

JQueryには過去に括弧のオンとオフの問題があったことに注意してください。これは、エスケープの必要性をめぐる多くの混乱を説明できます。かっこを付けて引用するだけで問題が発生したことはわかっています。

参照: http://dev.jquery.com/ticket/344

1
cgp

私はそれがこのようなものになると信じています:

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

編集:コメンターは正しいです。私は最初の応答に行く必要がありました。 :)今回は「^」を使用します。

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