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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

Q&A

解決済

2回答

1432閲覧

html内の連想配列のnameをリネームしたい。

tomomo

総合スコア430

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

0グッド

0クリップ

投稿2019/02/28 00:47

下記のようなHTMLが存在する時、追加のボタンを押した時に最後の入力欄を元に複写し、nameを変えたいのですが、どのようにすればよいか、色々やってみたのですがわからなく質問させていただきました。
いわゆるアイテム入力欄の追加をフロントサイドで行いたいのです。
JavascriptあるいはjQueryに詳しい方にぜひご教授頂きたく。

html

1<div id="divisionList"> 2 <div class="card division-item"> 3 <input name="division[0][name]"> 4 <input name="division[0][age]"> 5 <div> 6 <input type="checkbox" name="division[0][peculiarity][]"> 7 <input type="checkbox" name="division[0][peculiarity][]"> 8 </div> 9 </div> 10 <div class="card division-item"> 11 <input name="division[1][name]"> 12 <input name="division[1][age]"> 13 <div> 14 <input type="checkbox" name="division[1][peculiarity][]"> 15 <input type="checkbox" name="division[1][peculiarity][]"> 16 </div> 17 </div> 18 <!-- ここに追加される --> 19</div> 20<button type="button" id="add">追加</button>

javascript

1$(add).on('click', function() { 2 var $divisionTemplate = $('.division-item').last().clone(); // division-itemの最後が複写される 3 4 // ここにname変更のロジック 5 6 $divisionTemplate.appendTo(divisionList); // 入力欄を最後に追記 7});

厄介なのがnameが連想配列であり、連番を持っていること。
コピーした$divisionTemplate内のdivision[数字]...をリネームしたいのです。
上記の場合、4箇所、$divisionTemplate内のdivision[1]...がdivision[2]...になる。
.findあたりで引っ掛けてreplaceかと思っていたのですが、難しく。。。

参考にしたサイトなど
jQueryでフォームを動的に追加/削除
jQueryのセレクタに正規表現・属性フィルタを使う方法!

何かヒントやその他参考にサイトなどでもいただけるとありがたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

各グループにある要素と[division]は決まってるんですよね?
$(".division-item").lengthでグループの個数がわかるので、そこから1つ1つ要素を指定してattr()でname変更していけば良いと思います。

例:

js

1$(add).on('click', function() { 2 const g_count = $(".division-item").length; 3 const $divisionTemplate = $('.division-item').last().clone(); 4 5 $($divisionTemplate.find("input")[0]).attr("name","division["+g_count+"][name]"); 6 $($divisionTemplate.find("input")[1]).attr("name","division["+g_count+"][age]"); 7 $($divisionTemplate.find("input[type=checkbox]")).attr("name","division["+g_count+"][peculiarity][]"); 8 $divisionTemplate.appendTo(divisionList); 9});

投稿2019/02/28 01:28

m.ts10806

総合スコア80850

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

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

tomomo

2019/02/28 01:41

解決しました。回答いただきありがとうございました。
m.ts10806

2019/02/28 02:09

解決されたようで何よりです。
guest

0

ベストアンサー

ちょっと雑ですが

javascript

1<script> 2$(function(){ 3 $(add).on('click', function() { 4 var cl = $('.division-item').last().clone(); // division-itemの最後が複写される 5 var num=parseInt(cl.find('input:eq(0)').attr('name').match(/[([0-9]+)]/)[1]); 6 cl.find('input').attr('name',function(){ 7 return $(this).attr('name').replace(new RegExp("\["+num+"\]"),"["+(num+1)+"]"); 8 }); 9 $('#divisionList').append(cl); 10});}); 11</script> 12<button type="button" id="add">追加</button> 13<div id="divisionList"> 14 <div class="card division-item"> 15 <input name="division[0][name]"> 16 <input name="division[0][age]"> 17 <div> 18 <input type="checkbox" name="division[0][peculiarity][]"> 19 <input type="checkbox" name="division[0][peculiarity][]"> 20 </div> 21 </div> 22 <div class="card division-item"> 23 <input name="division[1][name]"> 24 <input name="division[1][age]"> 25 <div> 26 <input type="checkbox" name="division[1][peculiarity][]"> 27 <input type="checkbox" name="division[1][peculiarity][]"> 28 </div> 29 </div> 30 <!-- ここに追加される --> 31</div> 32

投稿2019/02/28 01:15

yambejp

総合スコア114812

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

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

tomomo

2019/02/28 01:39

解決しました。ありがとうございます。 解決したのも嬉しいですが、こんなにあっさりかけるもんなんだなと非常に勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問