下記の処理でクロームのデバッグだとif文に入るのですが、デバッグをしないと入りません。
お分かりになる方よろしくお願いいたします。
【処理概要】
セレクトボックスでに数字を設定しており、選択した数だけDiv要素のコピーを生成する。
2回目以降の選択ではセレクトボックス変更前の値を取得し、前回生成した数を削除してから生成を行う。
【うまくいかないこと】
前回生成したDiv要素削除処理(If文)が走る時と走らない時があります。
クロームのデバッグだと100%走るので原因が分からずにいます。
【教えて欲しいこと】
なぜこのような事象が起きているのかとその対処方法
追加情報が必要でしたらお申し付けください。
よろしくお願いします。
【追記】
HTMLを追記しました。
id:owhAppSctn13内のセレクトボックスで選択した値の数だけid:owhAppSctn14をコピーします。
コピーのidはowhAppSctn15.16.17...と連番になります。
【追記2】
動きを見ているとif文を除去しても削除処理が起きませんでした(デバッグだと起きます)
html
1<div id="owhAppSctn13" class="owhAppPageCon"> 2 <div class="owhAppPageInnrCon"> 3 <div class="owhAppFormItem"> 4 <p class="owhAppFormItemName"> 5 <span class="required">*</span>第1セクションのタイトルを入力してください。 6 </p> 7 <div class="owhAppFormInput"> 8 <input type="text" name="name""> 9 </div> 10 </div> 11 <div class="owhAppFormItem"> 12 <p class="owhAppFormItemName"> 13 <span class="required">*</span>第1セクションのサブセクション数を選択してください。 14 </p> 15 <div class="sectionSelect subSctn1choice"> 16 <select name="name"> 17 <option hidden>サブセクション数を選択</option> 18 <option value="1">1</option> 19 <option value="2">2</option> 20 <option value="3">3</option> 21 <option value="4">4</option> 22 <option value="5">5</option> 23 <option value="6">6</option> 24 <option value="7">7</option> 25 <option value="8">8</option> 26 <option value="9">9</option> 27 <option value="10">10</option> 28 <option value="11">11</option> 29 <option value="12">12</option> 30 </select> 31 </div> 32 </div> 33 <a href="#" class="fxNxtScButton"> 34 <div class="owhAppStartButton">次へすすむ</div> 35 </a> 36 </div> 37</div> 38 39<!-- コピー元 --> 40<div id="owhAppSctn14" class="owhAppPageCon subSection"> 41 <div class="owhAppPageInnrCon"> 42 <div class="owhAppFormItem"> 43 <p class="owhAppFormItemName"> 44 <span class="required">*</span>サブセクション1のタイトルを入力してください。<br> 45 </p> 46 <div class="owhAppFormInput"> 47 <input type="text" name="name"> 48 </div> 49 </div> 50 <div class="owhAppFormItem"> 51 <p class="owhAppFormItemTxtArea"> 52 <span class="required">*</span>サブセクション1についての説明文を入力してください。<br> 53 </p> 54 <div class="owhAppFormTextArea"> 55 <textarea name="otoiawase"></textarea> 56 </div> 57 </div> 58 <a href="#" class="fxNxtScButton"> 59 <div class="owhAppStartButton">次へすすむ</div> 60 </a> 61 </div> 62</div> 63
javascript
1 let bfrVal; //前回セレクトで選択した値 2 3 //セレクトボックスフォーカス・変更で発動 4 $('.subSctn1choice select').on('focus', function() { 5 bfrVal = $(this).val(); 6 }).change(function() { 7 let baseObj = $('#owhAppSctn14'); //コピー元のDiv要素 8 createSbSctn($(this), baseObj); 9 }); 10 11 // Div生成処理 12 function createSbSctn(thisObj, baseObj) { 13 //選択したvalue値を変数に格納 14 let sbSctnVal = thisObj.val(); 15 let crntId; //現在要素のID 16 let nxtId; //次要素のID 17 let trgtRmv; //削除対象のID 18 let crntObj = baseObj; //現在要素 19 let nxtObj; //次要素 20 let sbSctnCln; //サブセクション 21 22 //**********ここから削除処理**************************************** 23 //変更前の値が数値の場合はその数だけ要素を削除する 24 if ($.isNumeric(bfrVal)){ 25 //開始idを割り出す 26 crntId = baseObj.attr('id').slice(-2); 27 crntId = Number(crntId); 28 29 //削除対象要素分繰り返す 30 for (let i=0; bfrVal>i; i++){ 31 crntId++; 32 trgtRmv = "#owhAppSctn"+crntId; 33 trgtRmv = $(trgtRmv); 34 trgtRmv.remove(); 35 } 36 } 37 //**********ここまで削除処理**************************************** 38 39 // プルダウンで選択した数のサブセクションを生成する 40 for (let i=0; sbSctnVal>i; i++){ 41 42 sbSctnCln = baseObj.clone(); //要素コピー 43 nxtId = sbSctnCln.attr('id').slice(-2); //ID下2桁を抽出 44 nxtId = Number(nxtId); //数値に変換 45 nxtId = "owhAppSctn"+(nxtId+i+1); //次のIDを割り出す 46 nxtObj = "#"+nxtId; //次要素を生成 47 48 sbSctnCln.attr('id',nxtId); // コピーした要素にIDを付与 49 50 //要素の後ろにコピーした要素を追加する 51 crntObj.after(sbSctnCln); 52 nxtObj = $(nxtObj); //次要素を生成 53 crntObj = nxtObj; //更新 54 55 } 56 }
回答1件
あなたの回答
tips
プレビュー