前提
メニュー名、時間、料金を登録するシステムを作っています。
<tbody>内の<tr>が動的に増減します。実現したいこと
PHP(26行目)
1 <td><input type="text" name="menu_name[]" placeholder="メニュー名" value="<?php echo $menu[$i][0];?>" class="m-form-text sample"></td>
や
PHP(35行目)
1<td><input type="text" name="menu_name[]" placeholder="メニュー名" value="<?php echo $menu[$i][0];?>" class="m-form-text sample"></td>
に入力できる文字数を25文字以内としたいので、入力しながら現在の文字数を確認できるようにしたいです。
何も入力していない時
メニュー文字数:0 / 25
10文字入力すると
メニュー文字数:10 / 25
このように「0」の部分が変化する様にしたいです。
最初のinputに入力した文字数はうまく表示されるのですが、次以降inputに入力しても変化しません。
「0」または最初のinputで表示された数字のまま変わらない状態です。
なぜか「Firefox」のブラウザではうまく表示されます。
アドバイスをいただけると助かります。よろしくお願いします。
該当のソースコード(HTML部分)
PHP
1<form action="check.php" method="post" enctype="multipart/form-data"> 2<!-- 料金========================================== --> 3 <div class="Form-Item"> 4 <h3 class="Form-Item-Label"><span class="must">必須</span>メニュー<span class="err"><?php echo $menu_countErr;?></span><span class="err"><?php echo $menuErr;?></span><span class="err"><?php echo $menu_timeErr;?></span><span class="err"><?php echo $menu_priceErr;?></span><span class="err"><?php echo $menu_couponErr;?></span></h3> 5 <div class="m-form-talbe"> 6 <table class="menu-table"> 7 <thead> 8 <tr class="lead"> 9 <th colspan="3"></th> 10 <th colspan="2" class="coupon">クーポン適応時</th> 11 </tr> 12 <tr class="title"> 13 <th class="menu-name">メニュー名</th> 14 <th class="menu-time">時間(分)</th> 15 <th class="menu-fee">料金(税込)</th> 16 <th class="menu-time">時間(分)</th> 17 <th class="menu-fee">料金(税込)</th> 18 </tr> 19 </thead> 20 <tbody class="addInput" id="u1"> 21 <?php 22 if(is_array($menu) == true){ 23 for ($i = 0 ; $i < count($menu); $i++){ 24 ?> 25 <tr> 26 <td><input type="text" name="menu_name[]" placeholder="メニュー名" value="<?php echo $menu[$i][0];?>" class="m-form-text sample"></td> 27 <td><input type="text" name="menu_time[]" placeholder="時間" value="<?php echo $menu[$i][1];?>" class="m-form-text"></td> 28 <td><input type="text" name="menu_price[]" placeholder="料金" value="<?php echo $menu[$i][2];?>" class="m-form-text"></td> 29 <td><input type="text" name="menu_time_coupon[]" placeholder="クーポン時間" value="<?php echo $menu[$i][3];?>" class="m-form-text"></td> 30 <td><input type="text" name="menu_price_coupon[]" placeholder="クーポン料金" value="<?php echo $menu[$i][4];?>" class="m-form-text"></td> 31 </tr> 32 <?php } 33 }else{?> 34 <tr> 35 <td><input type="text" name="menu_name[]" placeholder="メニュー名" class="m-form-text sample"></td> 36 <td><input type="text" name="menu_time[]" placeholder="時間" class="m-form-text"></td> 37 <td><input type="text" name="menu_price[]" placeholder="料金" class="m-form-text"></td> 38 <td><input type="text" name="menu_time_coupon[]" placeholder="クーポン時間" class="m-form-text"></td> 39 <td><input type="text" name="menu_price_coupon[]" placeholder="クーポン料金" class="m-form-text"></td> 40 </tr> 41 <?php }?> 42 </tbody> 43 </table> 44 <ul class="buttonset"> 45 <li><input type="button" value="追加" id="add" class='form-submit-button add'></li> 46 <li><input type="button" value="削除" id="del" class='form-submit-button del'></li> 47 </ul> 48 <div class="check-wrapp"> 49 <p class="cnt_area">メニュー文字数:<span class="now_cnt">0</span> / 25</p> 50 </div> 51 </div> 52 </div> 53<!-- 送信========================================== --> 54 <div class="submit"> 55 <p> 56 <button type='button' class='form-submit-button gray' onclick='location.href="mgmt_top.php"'>戻る</button> 57 </p> 58 <p> 59 <input type="submit" name="" value="登録" class="form-submit-button pink" /> 60 </p> 61 </div> 62</form>
該当のソースコード(jQuery部分)
JavaScript
1 2<!--jQuery本体--> 3<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 4<!--文字数をカウント--> 5<script> 6jQuery(function($){ 7 //入力時のイベント 8 $('.sample').on('input', function(){ 9 //文字数を取得 10 var cnt = $(this).val().length; 11 //現在の文字数を表示 12 $('.now_cnt').text(cnt); 13 if(cnt > 0 && 25 >= cnt){ 14 //1文字以上かつ25文字以内の場合は黒字 15 $('.cnt_area').removeClass('cnt_danger'); 16 }else{ 17 //0文字または25文字を超える場合は赤字 18 $('.cnt_area').addClass('cnt_danger'); 19 } 20 }); 21 22 //リロード時に初期文字列が入っていた時の対策 23 $('.sample').trigger('input'); 24 25}); 26</script> 27<!--メニュー追加・削除--> 28<script> 29window.addEventListener('DOMContentLoaded', ()=>{ 30add.addEventListener('click',()=>{ 31const n=u1.querySelector('tr').cloneNode(true); 32n.querySelectorAll('input').forEach(x=>x.value=""); 33u1.appendChild(n); 34}) 35 del.addEventListener('click',()=>{ 36 if(u1.querySelector('tr:nth-child(2)')){ 37 u1.querySelector('tr:last-child').remove(); 38 } 39 }) 40}); 41document.addEventListener('formdata',e=>{ 42 const f=e.formData; 43 const n=f.getAll('menu_name[]'); 44 f.delete('menu_name[]'); 45 const t=f.getAll('menu_time[]'); 46 f.delete('menu_time[]'); 47 const p=f.getAll('menu_price[]'); 48 f.delete('menu_price[]'); 49 const ct=f.getAll('menu_time_coupon[]'); 50 f.delete('menu_time_coupon[]'); 51 const cp=f.getAll('menu_price_coupon[]'); 52 f.delete('menu_price_coupon[]'); 53 n.forEach((x,y)=>{ 54 f.set(`menu[${y}][0]`,x); 55 f.set(`menu[${y}][1]`,t[y]); 56 f.set(`menu[${y}][2]`,p[y]); 57 f.set(`menu[${y}][3]`,ct[y]); 58 f.set(`menu[${y}][4]`,cp[y]); 59 }); 60}); 61</script> 62
参考にしたページ
https://kinocolog.com/jquery_input_count/
調べたこと
「JavaScript 文字カウント 複数」などで検索したのですが、解決できませんでした
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/03/21 04:26
2023/03/21 05:24
2023/03/21 06:45
2023/03/22 00:22
2023/03/22 09:26