全体の説明として
+ボタンを押下で1コンテンツを追加でき、
-ボタンを押下でボタンが付属するコンテンツを削除できます。
1コンテンツ目のプルダウンで「なし」以外を選択すると「追記」項目が表示されます。
現状
+ボタン押下で2コンテンツ目を追加し、その中のプルダウンを選択しても「追記」項目が表示できません。
1コンテンツ目内でプルダウンを非表示にすると2コンテンツ目と連動し、2コンテンツ目のプルダウンも
非表示になってしまいます。
どうしたいか
これを修正し、1コンテンツ目内では「追記」項目を表示、
2コンテンツ目では「追記」項目を非表示という風に、各コンテンツごとに別々の内容にするには
どうすればよろしいでしょうか。
このようになっている理由は、コンテンツがそれぞれ独立していないからだと思い、
各コンテンツに番号を振るか、または、.index()で何番目のコンテンツかを把握し、
プルダウンがそれぞれ別のコンテンツ内にあるということを記述すればよいのかな と思っていますが、
いまいち方法がわかりません。
ご教授いただけませんでしょうか。
HTML
1<div class="ice_inner"> 2 <form class="input-form"> 3 <div style="display:none;"><input type="hidden" name="_method" value="POST"></div> 4 <fieldset> 5 <div class="form-group input-text mb-3 mb-4"> 6 <p class="text input-title mb-2 fs18">アイス 7 </p> 8 <div class="select-area m-0"> 9 <div class="form__select__80 delete--auto--area mx-auto"> 10 <div class="input-form__select form-group indent text-left mr-3 mb-3 m-0 col-lg-6"> 11 <select name="select--ice[]"> 12 <option value="select--non" selected="selected">なし</option> 13 <option value="select--a">バニラ</option> 14 <option value="select--b">ストロベリー</option> 15 <option value="select--c">抹茶</option> 16 <option value="select--d">チョコ</option> 17 </select> 18 </div> 19 </div> 20 </div> 21 </div> 22 </fieldset> 23 <fieldset> 24 <div class="form-group input-text mb-3 mb-4 area--password" style="display: none;"> 25 <p class="text input-title mb-2 fs18">追記 26 27 </p> 28 <div class="select-area m-0"> 29 <input type="password" name="ice_security_password[]" class="form-control input-form__text" placeholder="" required=""> 30 </div> 31 </div> 32 </fieldset> 33 <div class="button--delete--ice col-md-10"> 34 <button class="float-right">ー</button> 35 </div> 36 <div class="button--add--ice col-md-10"> 37 <button class="float-right">+</button> 38 </div> 39 </form> 40</div>
CSS
1 2.ice_inner{ 3padding-top: 55px !important; 4 position: relative; 5} 6.button--delete--ice{ 7top: 1em; 8right: 7em; 9position:absolute; 10} 11.button--add--ice{ 12top: 1em; 13right: 3em; 14position:absolute; 15} 16
Javascript(jQuery3.3.1使用)
1$(function(){ 2 3 $('.input-form__select select[name="select--ice[]"]').change(function() { 4 5 let $select = $(this); 6 let index = $select.index(this); 7 let value = $select.val(); 8 let optionText = $select.find(':selected').text(); 9 10 switch (optionText) { 11 case 'select--non': 12 $(this).$('div.area--password').css('display','none'); 13 break; 14 case 'select--a': 15 case 'select--b': 16 case 'select--c': 17 case 'select--d': 18 $(this).$('div.area--password').css('display','block'); 19 break; 20 } 21 22 /* 下記記述を↑上の方式で書きたい */ 23 if ($('select[name="select--ice[]"] option:selected').val() == 'select--non') $('div.area--password').css('display','none'); 24 }); 25 $('.input-form__select select[name="select--ice[]"]').change(function() { 26 if ($('select[name="select--ice[]"] option:selected').val() == 'select--a') $('div.area--password').css('display','block'); 27 }); 28 $('.input-form__select select[name="select--ice[]"]').change(function() { 29 if ($('select[name="select--ice[]"] option:selected').val() == 'select--b') $('div.area--password').css('display','block'); 30 }); 31 $('.input-form__select select[name="select--ice[]"]').change(function() { 32 if ($('select[name="select--ice[]"] option:selected').val() == 'select--c') $('div.area--password').css('display','block'); 33 }); 34 $('.input-form__select select[name="select--ice[]"]').change(function() { 35 if ($('select[name="select--ice[]"] option:selected').val() == 'select--d') $('div.area--password').css('display','block'); 36 }); 37 --> 38}); 39 40 41 /* tab ice add new contents */ 42 $(function(){ 43 $('.button--add--ice').on('click',function(){ 44 45 // 現在押されたボタン位置を取得 46 var index_this = $(".button--add--ice").index(this); 47 48 // 現在押されたボタン位置にある要素の下に同じ要素を追加 49 $(".ice_inner:eq(" + index_this + ")").after($(".ice_inner:eq(" + index_this + ")").clone(true)); 50 51 52 // 現在押されたボタン位置から追加された要素の位置を設定 53 var index_added = index_this + 1; 54 55 // 項目を初期化する。(※ファイルの項目初期化は懸案) 56 $('.ice_inner').eq(index_added).find("input[type='text']").val(''); 57 $('.ice_inner').eq(index_added).find("input[type='checkbox']").prop('checked',false); 58 59 60 }); 61 62 63 $('.button--delete--ice').on('click',function(){ 64 65 // 要素がすべて削除された場合は未設定状態に戻す。 66 if($('.ice_inner').length == 1) { 67 $('.ice_inner').addClass('d-none'); 68 $('.ice_inner:eq(0)').find("input[type='text']").val(''); 69 $('.ice_inner:eq(0)').find("input[type='checkbox']").prop('checked',false); 70 $('#ice .tab--nothing').removeClass('d-none'); 71 $('li.ice .text-status').addClass('d-none'); 72 $('li.ice .text-status-none').removeClass('d-none'); 73 $('p.text--lead--ice').addClass('d-none'); 74 } 75 76 // 現在押されたボタン位置を取得 77 var index_this = $(".button--delete--ice").index(this); 78 79 // 現在押されたボタン位置にある要素を削除する。 80 if($('.ice_inner').length > 1) { 81 $(".ice_inner:eq(" + index_this + ")").remove(); 82 } 83 84 }); 85 }); 86 87 88
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/29 00:54