2009-10-25 12 views
189

私はこのhtmljQueryの親フォームを見つける

を持っています
<ul> 
    <li><form action="#" name="formName"></li> 
    <li><input type="text" name="someName" /></li> 
    <li><input type="text" name="someOtherName" /></li> 
    <li><input type="submit" name="submitButton" value="send"></li> 
    <li></form></li> 
</ul> 

どのようにinput[name="submitButton"]が含まれているフォームを選択できますか? (私はフォームを選択し、それにいくつかのフィールドを追加したい送信ボタンをクリックすると)

答えて

437

は、私が最も一致する親要素を選択closest、使用することをお勧め(私は、フォームを選択し、その中にいくつかのフィールドを追加したい[送信]ボタンをクリックしたとき):フィルタリングの代わりに

$('input[name="submitButton"]').closest("form"); 

を名前によって、私はこれを行うだろう:

$('input[type=submit]').closest("form"); 
+0

どうもありがとう!私は本当にこれで苦労していました。 –

+2

インデックスを追加する必要がありますか? '(入力 "[タイプ=提出]")。最も近い( "フォーム");フォームの配列を返します。 – sergzach

+0

私はこのように上記を使用しようとしています: $( "。各img")(0123) しかし、私はそれを動作させるように見えることはできません。 :/ – Alisso

52

すべての入力に存在するフォーム参照を使用できます。これは.closest()よりもはるかに速く(ChromeとIE8では5〜10倍高速)。 IE6 &でも動作します。私に

var input = $('input[type=submit]'); 
var form = input.length > 0 ? $(input[0].form) : $(); 
+2

あなたはIE8について言及しています。これはバージョン6,7、および9でも同様ですか? – Sonny

+1

@peterjwestが言及したように、これははるかに優れていて高速です。 Re:IE6の入力要素がIE4上にあったと思いますが、残念なことにnetscapeの開発者ページはなくなりました。誰がmozillaをチェックするのでしょうか? –

+0

これは、入力が独自のフォーム割り当てを持つ可能性があるので、 'closest()'を使用するよりもはるかに安全な方法です:http://codepen.io/anon/pen/vNqEyg –

12

、これが最速/最も簡単なように見えます:

$('form input[type=submit]').click(function() { // attach the listener to your button 
    var yourWantedObjectIsHere = $(this.form); // use the native JS object with `this` 
}); 
+2

私にとっては、 '$(this.form)'を使うのが最善の解決策です – jap1968

関連する問題