2013-01-02 23 views
30

フォームのすべての子要素をループする最善の方法はなんですか? フォームに入力要素と選択要素の両方が含まれています。フォームのすべての要素をループする方法jQuery

success: function(data) { 
       $.each(data.details, function(datakey, datavalue) { 
        $('#new_user_form > input').each(function(key, value) { 
         if($(this).attr('id') == datakey) { 
          $(this).val(datavalue); 
         } 
        }); 
       }); 
      } 

これが唯一しかし、フォームの入力要素をループして、私はあまりにも選択要素を含める:

私が試してみました:

$('#new_user_form > input, #new_user_form > select').each(function(key, value) { 
を私が持っている瞬間

これは機能しません。誰がなぜこれが起こっているのか知っていますか? ありがとう!

+0

を:http://jsfiddle.net/ G8tjU /フォームのHTMLを表示する必要があります。 – JJJ

+1

HTMLを見る必要があります。 – scoota269

答えて

57

jQueryのページから:inputセレクタについて:

ので:入力はjQueryの延長ではなく、CSSの仕様の一部であり、使用してクエリ:入力はネイティブDOMが提供するパフォーマンス向上の利点を取ることができませんquerySelectorAll()メソッド要素を選択するために入力を使用するときに最高のパフォーマンスを達成するには、まず純粋なCSSセレクタを使用して要素を選択し、.filter( ":input")を使用します。

これが最適です。

$('#new_user_form *').filter(':input').each(function(){ 
    //your code here 
}); 
+1

ロジックは良いですが、最初のセレクタが間違っています。フォーム要素をフィルタリングしています。フィルタ関数を使うには、 '#new_user_form *'のようなことをして入力要素だけをフィルタリングする必要があります。 – scoota269

+1

@ scoota269おっと、私はアスタリスクを忘れました。私の悪い! – Ohgodwhy

+0

これは正常に動作します。ありがとう! – devoncrazylegs

1

$('#new_user_form :input')の順です。セレクタ>の省略に注意してください。有効なHTMLフォームでは、フォームタグの直接の子である入力タグは許可されません。

1

何が起こるか、あなたがこの方法を実行する場合: - :

for(var i=0; i < form.elements.length; i++){ 
    var e = form.elements[i]; 
    console.log(e.name+"="+e.value); 
} 

注:フォームため

$('#new_user_form input, #new_user_form select').each(function(key, value) { 

は、純粋なJavaScriptはそれは難しいことではありませんLIVE DEMO

8
$('#new_user_form').find('input').each(function(){ 
    //your code here 
}); 
+8

これは実際には機能します。選択とテキストエリアを取得したい場合:$( '#new_user_form')。find( 'input、textarea、select')それぞれ(function(){ //あなたのコードはこちら }); – mpemburn

16

を参照してください。 .elementsはオブジェクトですfor-inループは期待どおりに動作しません。

回答が見つかりましたhere (by Chris Pietschmann)here (W3S)と記載されています。

7

#jquery FreenodeのIRCチャンネルから取られたよう:チャネル上@Corkへ

$.each($(form).serializeArray(), function(_, field) { /* use field.name, field.value */ }); 

感謝。私が使用している

+0

これは、すべてのフォームのリスナーを持っている場合に最適なソリューションです。これは私のケースです: '$( 'body')。( 'submit'、 'form'、function(e){e.preventDefault(); $ .each($(this).serializeArray()、function 、object){console.log(object)});}); 'ありがとう! – Albert

+1

コールバックの最初のパラメータはインデックスなので、 '$ .each($(form).serializeArray()、function(index、field){});' まだUpvoting :) –

3

$($('form').prop('elements')).each(function(){ 
    console.info(this) 
}); 

をそれは醜いようだが、私にはそれはまだjQueryを持つすべての要素を取得するための良い方法です。

2

私は私が一緒に仕事をしたいセレクタのちょうどタイプを選択するための便利なように、この単純なjQueryのスニペットを発見した:


$("select, input").each(function(){ 
    // do some stuff with the element 
}); 
私のために罰金作品
関連する問題