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

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

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

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

jQuery

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

HTML

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

Q&A

2回答

418閲覧

フォームの項目を追加・削除できるようにした後、一番上の項目は削除できないようにしたい

___2612

総合スコア0

JavaScript

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

jQuery

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

HTML

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

0グッド

0クリップ

投稿2023/04/12 12:08

実現したいこと

フォームの項目をjqueryで追加・削除できるよう実装したが、
一番最初の項目は削除できない様にしたい。

前提

jqueryでフォームの項目を、ボタンのクリックで追加・削除できるように実装しました。
削除の際に、一番上の項目まで、削除できてしまうので、一番上のbuttonにはdisabledをつけたい。

該当のソースコード

<div class="item column"> <label class="label">果物</label> <div class="s-box" data-formno="0" id="s-box"> <select class="fruits" id="" name="fruits[0]"> <option value="">選択してください</option> <option value="apple">りんご</option> <option value="banana">バナナ</option> <option value="grape">ぶどう</option> </select> <button class="remove-btn" type="button">削除</button> </div> <button class="add-btn" type="button">追加する</button> </div>
$(function() { //追加 $('.add-btn').click(function() { //クローンを変数に格納 var clonecode = $('.s-box:last').clone(true); //数字を+1し変数に格納 var cloneno = clonecode.attr('data-formno'); var cloneno2 = parseInt(cloneno) + 1; var cloneno3 = parseInt(cloneno) + 2; //data属性の数字を+1 clonecode.attr('data-formno',cloneno2); //name属性の数字を+1 var namecode = clonecode.find('select.fruits').attr('name'); namecode = namecode.replace(/fruits\[[0-9]{1,2}/g,'fruits[' + cloneno2); clonecode.find('select.fruits').attr('name',namecode); //HTMLに追加 clonecode.insertAfter($('.s-box:last')); }); //削除 $('.remove-btn').click(function() { //クリックされた削除ボタンの親要素を削除 $(this).parents(".s-box").remove(); var scount = 0; //番号振り直し $('.s-box').each(function(){ var scount2 = scount + 1; //data属性の数字 $(this).attr('data-formno',scount); //select質問タイトル番号振り直し var name = $('select.fruits',this).attr('name'); name = name.replace(/fruits\[[0-9]{1,2}/g,'fruits[' + scount); $('select.fruits',this).attr('name',name); scount += 1; }); }); });

試したこと

フォームはこちらの記事を参考に作成しました。
https://4ndan.com/blog/form/

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

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

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

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

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

yambejp

2023/04/13 01:32

一番上を削除できなくするのではなく、最後の1個を削除できなくすべきでしょうね
guest

回答2

0

こんなかんじでしょうか?

javascript

1<script> 2const click_func=()=>{ 3 document.querySelectorAll('.remove-btn').forEach((x,_,y)=>{ 4 x.disabled=y.length<2; 5 }) 6 document.querySelectorAll('[data-formno]').forEach((x,y)=>{ 7 x.dataset.formno=y; 8 x.querySelector('.fruits').setAttribute('name',`fruits[${y}]`); 9 }) 10} 11document.addEventListener('click',({target})=>{ 12 if(target.matches('.add-btn')){ 13 const sbox=document.querySelector('.s-box'); 14 sbox.after(sbox.cloneNode(true)); 15 click_func(); 16 } 17 if(target.matches('.remove-btn')){ 18 target.closest('.s-box').remove(); 19 click_func(); 20 } 21}); 22window.addEventListener('DOMContentLoaded', ()=>{ 23 click_func(); 24}); 25</script> 26<div class="item column"> 27<label class="label">果物</label> 28<div class="s-box" data-formno="0"> 29<select class="fruits" name="fruits[0]"> 30<option value="">選択してください</option> 31<option value="apple">りんご</option> 32<option value="banana">バナナ</option> 33<option value="grape">ぶどう</option> 34</select> 35<button class="remove-btn" type="button">削除</button> 36</div> 37<button class="add-btn" type="button">追加する</button> 38</div> 39

投稿2023/04/13 00:59

yambejp

総合スコア114843

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

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

0

一番上のbuttonにはdisabledをつけたい。

HTMLのコード上では disabled 属性を付けておいて、複製するコードで複製の disabled を消すといいでしょう。

投稿2023/04/12 14:37

int32_t

総合スコア20884

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問