35

次の 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

4 に答える 4

54

フィールドの名前は ではなく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 が最初にヒットするとすぐに]、値が終わったと考えます。その答えも説明しているように、あなたはstartsWithまたは純粋なDOM要素の使用にこだわっています。

SUPER DUPER IMPORTANT EDIT :
このバグは修正されたようです。上記で「理想的」と説明したコードを使用できるはずです。

于 2009-04-14T13:59:11.750 に答える
5

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

$("#myform input[name='foo[]']:checked:enabled");
于 2009-04-14T14:01:00.933 に答える
1

実際、あなたが持っているものはうまく機能します。二重引用符を使用し、括弧を含めて一致させるだけです。

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

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

jQuery には、過去に括弧のオンとオフの問題があったことに注意してください。これは、エスケープの必要性を取り巻く多くの混乱を説明できます。私は、括弧と引用だけで自分自身に問題があったことを知っています。

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

于 2009-04-14T14:06:00.703 に答える
0

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

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

編集:コメント者は正しいです。私は最初の応答で行くべきでした。:) 今回は「^」を使います。

$("input[name^=foo] :checked");
于 2009-04-14T14:00:39.827 に答える