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

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

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

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

2901閲覧

JQuery:項目の追加・削除について

onobeka

総合スコア25

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/03/23 05:15

はじめまして。
JQueryを使用しボタンを押下した際の処理を書いているのですが、
上手く動作しないので分かる方がいればご教授頂けますか。

●処理内容
・初期状態では「備考」エリアは1つ表示されている
・項目を追加を押下すると「タイトル」と「内容」を含んだ「備考」エリアが追加される
・「備考」エリアが追加されるたびにタイトルの末尾は連番で振られる
・削除を押すと該当の「備考」エリアが削除される

●困っていること
「備考」エリアを3つ以上に増やし
2番目の「備考」エリアを削除すると、

タイトルが「備考3」のままになる、
inputのnameの末尾が3のままになる。
希望としてはタイトルやnameは連番にしたいのですが方法が分からないのでご教授頂けますか。

JQuery

1<script> 2jQuery(document).ready(function($) { 3 var prefix_order_list = 'order_list_'; // 品目入力欄のname属性の接頭辞 4 5 // "品目の追加"ボタンを押した場合の処理 6 $('#btn_add').click(function(){ 7 // 品目入力欄を追加 8 var len_list = $('#order_list > div.list').length+1; 9 10 // alert(len_list); 11 12 var new_list = '<div class="list"><h3 class="tit03 col-xs-9 col-sm-10">' + '追加記述' + len_list + '</h3>'; 13 new_list += '<div class="col-xs-3 col-sm-2 button_del"></div>'; 14 new_list += '<div class="form-group col-xs-12">'; 15 new_list += '<label for="exampleInputName16" class="">タイトル</label>'; 16 new_list += '<input type="text" class="form-control " id="' + 'addtit' + len_list + '" placeholder="" name="'+ 'addtit' + len_list + '" >'; 17 new_list += '</div>'; 18 new_list += '<div class="form-group col-xs-12">'; 19 new_list += '<label for="'+ 'addcont' + len_list +'" class="">'+ '内容' +'</label>'; 20 new_list += '<textarea class="form-control " rows="3" id="' + 'addcontent' + len_list + '"' + 'name="' + 'addcontent' + len_list + '"></textarea>'; 21 new_list += '</div>'; 22 new_list += '</div>'; 23 24 $('#order_list').append(new_list); 25 26 // 削除ボタンの一旦全消去し、配置し直す 27 $('#order_list button').remove(); 28 len_list++; 29 // alert(len_list); 30 31 for (var i = 0; i < len_list; i++) { 32 var new_btn = '<button type="button" class="btn btn-danger btn-block">削除</button>'; 33 34 $('#order_list > div .button_del').eq(i).append(new_btn); 35 } 36 }); 37 38 // 削除ボタンを押した場合の処理 39 $(document).on('click', '#order_list button', function(ev) { 40 // 品目入力欄を削除 41 var idx = $(ev.target).parent().index(); 42 $('#order_list > div.list').eq(idx).remove(); 43 44 var len_list = $('#order_list > div.list').length; 45 46 // 入力欄がひとつになるなら、削除ボタンは不要なので消去 47 if (len_list == 1) $('#order_list button').remove(); 48 49 // 入力欄の番号を振り直す 50 for (var i=0; i<len_list; i++) { 51 $('#order_list > div.list').eq(i).children('button').attr('name', prefix_order_list + i); 52 $('#order_list > div.list').eq(i).children('input[type="text"]').attr('name', prefix_order_list + i); 53 } 54 }); 55}); 56</script>

HTML

1<form class="form-inline"> 2 <div class="row" id="order_list"> 3 4 <div class="list"> 5 <h3 class="tit03 6 col-xs-9 7 col-sm-10 8 ">備考1</h3> 9 10 11 <div class="form-group col-xs-12"> 12 <label for="addtit1" class="">タイトル</label> 13 <input type="text" class="form-control" id="addtit1" name ="addtit1" placeholder=""> 14 15 </div> 16 17 <div class="form-group col-xs-12"> 18 <label for="addcont1" class="">内容</label> 19 <textarea class="form-control " rows="3" id="addcontent1" name="addcontent1"></textarea> 20 </div> 21 </div> 22 23 </div> 24 25 26 27 28 <div class="row"> 29 30 <div class="col-xs-12 31 col-sm-10 32 col-sm-offset-1 33 "> 34 <div class="row"> 35 36 <div class="col-xs-12 37 col-sm-6 38 margin_b20 39 "> 40 <button type="button" id="btn_add" class="btn btn-primary btn-lg btn-block">項目を追加</button> 41 </div> 42 43 44 45 </div> 46 47 </div> 48 </form>

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

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

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

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

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

guest

回答2

0

ベストアンサー

$().children()は直下の子要素しか拾えないのでおそらくそこだと思います。

javascript

1.children(*)

javascript

1.find(*)

にかえてみてはどうでしょう。

ただこの場合i=0のとき存在しないノードを探しに行くのであまりおすすめできません。
→回避するにはiのオリジンナンバーを0ではなく1にするなどしてください。

あとは、他のかたの回答にもありますが同様の方法はいろいろあるのでぜひいろいろ検討してみてください。
個人的にデータバインディングはVueJSがおすすめです(学習コスト低いので)。

投稿2017/03/23 05:59

編集2017/03/23 06:11
Neko_doshi

総合スコア214

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

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

Neko_doshi

2017/03/23 06:13

あ、あと、タイトルはそもそも書き換える処理がなかったので割愛しております。 同様の手順でできるはずです。
onobeka

2017/03/23 06:18

なるほど! ただ、findに変更しても上手いこといかないんですよね。。。
Neko_doshi

2017/03/23 06:28

うーん・・・? 試してみたらうまくいっているように見えますが・・・ ↓タイトルをiで置換している処理を加えています。 https://jsfiddle.net/w2y2jvpL/
guest

0

CSSで処理するとか、追加記述部分を取得して番号を振りなおすとかではないでしょうか。

【CSS カウンタの利用 - ウェブデベロッパーガイド | MDN】
https://developer.mozilla.org/ja/docs/Web/Guide/CSS/Counters

【CSS3で要素のカウントが出来るんだ・・・「counter-increment」がランキング作るのに便利 | わぃおがわ】
https://yogawa.com/post-4937

投稿2017/03/23 05:37

kei344

総合スコア69400

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

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

onobeka

2017/03/23 06:19

ありがとうございます! 参考にさせていただきます^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問