2016-05-03 23 views
1

要求パラメータが一意であるために、以下のコードを使用して名前の最後に行番号を動的に追加します。eq()を使用しない入力名前属性の更新

$("#myTable").find("tr").each(function() { 
    var text = $(this).find("td input:text"); 
    var select = $(this).find("select"); 
    var cb = $(this).find("td input:checkbox"); 
    select.eq(0).prop("name", select.eq(0).prop("name") + counter); 
    text.eq(0).prop("name", text.eq(0).prop("name") + counter); 
    text.eq(1).prop("name", text.eq(1).prop("name") + counter); 
    cb.eq(0).prop("name", cb.eq(0).prop("name") + counter); 
}); 

私の上記のコードではなく、私が入力(テキスト、チェックボックス)を選択し、異なる種類の上で設定していてもeq()またはindexの指定を軽減する方法はあります。 誰も私にこれについてもっと簡単で短いアプローチを紹介できますか?どんな援助もとても感謝しています。

+0

HI @レイヨン、私はまた、最初の入力フィールドだけでなく、 – bumbumpaw

+0

提供された答えは、このユースケースに最適です... – Rayon

答えて

3

セレクタはすべての入力を取得するので、selectとチェックボックスには別の句は必要ありません。そこから、each()ループの必要性を否定することができます。これは、現在の値を追加できるパラメータとして受け入れるprop()メソッドに関数を提供します。これを試してみてください:

$('#myTable :input').prop('name', function(i, v) { 
    return v + counter; 
}); 

あなたがcounter変数をインクリメントする必要がある場合は、このような現在のtrのインデックスを使用して、それを自動化することができたが、あなたはまだ、each()ループが必要になります

$('#myTable tr').each(function(tr_i) { 
    $(this).find(':input').prop('name', function(inp_i, v) { 
     return v + tr_i; 
    }); 
}); 
+0

こんにちは@Rory、あなたのコードをありがとう。私の問題は、あなたが提案するコードのために、何度も何度か入力フィールドが入力されているため、フォームを再送信する必要がある場合、inputText01はinputText011に変わります。私はinputText0のようなnumberという名前のパラメータを持つことができることに注意してください。 – bumbumpaw

+0

私は 'v.replace(/ \ d/g、 '')'を使っていましたが、できるだけ長く要求パラメータ名に数字を使わないようにしています。 :)) – bumbumpaw

+0

それは良い計画です。可能であれば、同じ名前を使用して値を配列として渡す方がよいでしょう。助けがあれば、アップヴォート/アンサーを忘れないでください:) –

0

あなたは:firstセレクタを使ってみましたか? jQueryウェブサイトのドキュメントは、https://api.jquery.com/first-selectorです。

+0

こんにちは、私はまた、最初の入力フィールドだけでなく、設定します。 – bumbumpaw

関連する問題