Q&A
独学で勉強中の初心者です。
JavaScriptで注文フォームを作っています。
クリック以外のイベントを利用するというコードを練習しています。
実現したいこと
1以上の数字を入力したときに出てくる「購入個数が0です。」の文字を消したいです。
発生している問題・エラーメッセージ
- 1以上の数字を入力したときにしたに「購入個数が0です。」と表記されます。
本来0以下の入力時に右側に赤色背景のテキストボックスで表示されるようにコードを入力したのですが、1以上をいれると、違う場所に「購入個数が0です。」と表示されてしまいます。
エラーメッセージ
コンソールでのエラーメッセージはありませんでした。
該当のソースコード
コード <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>10日で覚えるJavaScript</title> <style> table{border: solid 1px orange; border-spacing: 0px;} th,td{border: solid 1px orange; padding: 4px;} .outer{width: 328px; text-align: center;} .prod_list{text-align: center;} ul{list-style-type: none; background: gold; padding: 4px;} li{text-align: left;} [type = "button"],[type = "submit"]{margin: 16px;} #basket{width: 300px; margin: auto;} .empty_basket{border: dotted 6px darkcyan; background: black; padding: 8px;} .filled_basket{border: dotted 6px green; background: yellow; padding: 8px;} .groupbox{position: relative;} .desc_show{font-size:12px; background: cyan; padding: 4px; position:absolute; left: 330px; top:220px; width:120px;} .desc_hide{display: none;} .alert_show{font-size: 12px; background: red; color: white; padding: 4px; position: absolute; left:330px; top:200px; width: 120px;} .desc_hide{display: none;} </style> <script> window.addEventListener('load', //ページロード時の処理 function (event){ var elem = document.getElementById('btn_addprod'); elem.addEventListener('click', addProduct, false); elem = document.getElementById('txt_amount'); elem.addEventListener('focus', amount_gotFocus, false); elem.addEventListener('blur', amount_lostFocus, false); elem.addEventListener('keyup',amount_keyup, false); } ,false); //btn_addprodクリック時の処理 function addProduct(event){ var basket = document.getElementById('basket'); basket.className = 'filled_basket'; //選択されたオプションを取得 var product = ' '; var options = document.getElementsByName('products'); for(var i=0; i< options.length; i++){ if(options[i].checked){ product = options[i].value; break; } } //個数を取得 var tbox = document.getElementById('txt_amount'); var amount = tbox.value; //値を設定 basket.innerHTML += '<p>' + product + ' ' + amount + '個</p>'; } //フォーカス取得時のメッセージ表示 function amount_gotFocus(event){ var desc = document.getElementById('desc_amount'); desc.className = 'desc_show'; } function amount_lostFocus(event){ var desc = document.getElementById('desc_amount'); desc.className = 'desc_hide'; } //入力チェック function amount_keyup(event){ var amount = event.currentTarget.value; var alert = document.getElementById('alert_amount'); if(amount >0){ alert.className = 'alert_hide'; }else{ alert.className = 'alert_show'; } } </script> </head> <body> <h1>商品購入フォーム</h1> <div class="outer"> <form> <ul class="prod_list"> <li><input type="radio" name="products" value="none" checked>なし</li> <li><input type="radio" name="products" value="リラックスチェア" >リラックスチェア</li> <li><input type="radio" name="products" value="リラックスデスク" >リラックスデスク</li> <li><input type="radio" name="products" value="ブックスタンド" >ブックスタンド</li> </ul> <input type="text" id="txt_amount" value="0">個 <input type="button" id="btn_addprod" value="▼add"> <div id="desc_amount" class="desc_hide"> 購入個数を入力してください(1以上)。</div> <div id="alert_amount" class="alert_hide"> 購入個数が0個です。</div> <div id="basket" class="empty_basket"> </div> <input type="submit" value="購入"> </form> <div> </body> </html>```
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/09/23 14:50