質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

4994閲覧

form内のリストで複数件をPOSTする方法

退会済みユーザー

退会済みユーザー

総合スコア0

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/02/22 09:43

編集2017/02/22 10:04

すみませんタイトルだとわかりづらいかと思いますが、
やりたい内容としては

form内で


<table id='table'> <tbody> <tr><td><input type='hidden'name='td0.hoge'></td> <td><input type='hidden'name='td0.hoge2'></td></tr> <tr><td><input type='hidden'name='td1.hoge'></td> <td><input type='hidden'name='td1.hoge2'></td></tr> </tbody> </table>

このtrの中の要素を
jqueryでリストにまとめてajaxでpostしたいのですが、


var list = [];

$('#table tr').each(function(i){
var a = {
'hoge' : $(this).find('input[name = td'+i+'.hoge]').val(),
'hoge2' : $(this).find('input[name = td'+i+'.hoge2]').val()
}
list.push(a);
});


みたいな形で作ってみたのですが、エラーになります。
ためしにfor文で下記のように作ってみたのですが、
エラーにはならないのですが、値がちゃんと入っておりません。


for(var i = 0;i<$('#table tr').length;i++){
var a = {
'hoge' : $(this).find('input[name = td'+i+'.hoge]').val(),
'hoge2' : $(this).find('input[name = td'+i+'.hoge2]').val()
}
list.push(a);
}


すみませんが何故上手くいかないのか
ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ためしにfor文で下記のように作ってみたのですが、

エラーにはならないのですが、値がちゃんと入っておりません。

tdの内容はval()ではなく、text()で取得します。

こちらは単純にセミコロン忘れな気がします…

javascript

1var list = []; 2$('#table tr').each(function(i){ 3 var a = { 4 'hoge' : $(this).find('[name = td'+i+'.hoge').val(), 5 'hoge2' : $(this).find('[name = td'+i+'.hoge2').val() 6 }; 7 list.push(a); 8});

ちなみにこの書き方ですと、iの値が必ず対になっていると保証されないので少々危険な書き方だと思います。
以下のような書き方がよいと思います。

html

1<table id='table'> 2<tbody> 3 <tr> 4 <td><input type='hidden' name='td0.hoge' class="hoge"></td> 5 <td><input type='hidden' name='td0.hoge2' class="hoge2"></td> 6 </tr> 7 <tr> 8 <td><input type='hidden' name='td1.hoge' class="hoge"></td> 9 <td><input type='hidden' name='td1.hoge2' class="hoge2"></td> 10 </tr> 11</tbody> 12</table>

javascript

1var list = []; 2$('#table tr').each(function(i){ 3 var a = { 4 'hoge' : $(this).find('input:hidden.hoge').val(), 5 'hoge2' : $(this).find('input:hidden.hoge2').val() 6 }; 7 list.push(a); 8});

投稿2017/02/22 09:58

編集2017/02/22 10:11
nayuneko

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/22 10:05

すみませんすみません、 tdのモノではなくinputのものでした。。。 ご回答いただいたのに申し訳ございません。
nayuneko

2017/02/22 10:12

なるほど。考え方自体は同じですので、「ちなみに~」以下を修正しましたので、ご確認くださいませ。
退会済みユーザー

退会済みユーザー

2017/02/22 10:17

ありがとうございます! 上手くいきました!
guest

0

findに設定しているセレクタの文字列に']'がないというのと、.val()はinput系のエレメントにしか使えません。ですので.text()を使用します。

javascript

1var list = []; 2 3$('#table tr').each(function(i){ 4 var a = { 5 'hoge' : $(this).find('[name="td'+i+'.hoge"]').text(), 6 'hoge2' : $(this).find('[name="td'+i+'.hoge2"]').text() 7 } 8 list.push(a); 9});

投稿2017/02/22 09:55

turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/22 10:01

すみませんいろいろと質問内容が間違ってました修正します。 要素はinput要素のモノで、[]に関しても入っておりました。。。
guest

0

1 番目のものは i が定義されていません。2 番目のものは val でなく text ではありませんか?

訂正

i は私の見落としでした。

投稿2017/02/22 09:59

編集2017/02/22 10:00
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/22 10:06

本当にすみません、 tdではなくinput内のものです。。。 ご回答頂いたのに申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問