プログラミング学習267日目〜Laravel 自動車整備履歴アプリ作成 19日目〜
引き続き金額の自動計算。
やりたいことは、数量、単価をそれぞれのinputタグのテキストボックスに入力すると、数量✗単価の計算結果が金額のテキストボックスに入ること。
なにげに苦労したのが「テキストボックス」に計算結果を入れること。<p>なら入るけど、<input>にすると入らない。その理由になかなか気がつけませんでした。
まずは、覚え書きとして必要部分のみコードを。
<form method="POST" action="/maintenance/store" onSubmit="return checkSubmit()" name="form1">
@csrf
<div class="container">
<div>
<h3>数量</h3>
<h3>単価</h3>
<h3>金額</h3>
</div>
<p><input type="number" id="qty" name="qty" value="{{ old('qty') }}" onchange="func1()" style="text-align: right"></p>
<p><input type="number" id="unit_price" name="unit_price" value="{{ old('unit_price') }}" onchange="func1()" style="text-align: right"></p>
<p><input type="text" name="sub_total" value="{{ old('sub_total') }}" style="text-align: right" readonly></p>
</div>
<button type="submit" href="" class="btn btn-secondary">登録する</button>
</form>
</div>
<script>
'use strict';
function func1() {
//数量
let qty = document.getElementById('qty').value;
//単価
let unit_price = document.getElementById('unit_price').value;
//合計金額=数量*単価
let total = qty * unit_price;
document.form1.sub_total.value = '¥' + Math.round(total).toLocaleString() + '-';
}
</script>
<input>の値として自動入力させるには、JavaScriptで
document.フォーム名.input名.value = 変数
としてやる必要があるようです。なので<form>にもnameを付ける必要があります。
document.getElementById('id名').value = 変数
では<input>の場合うまくいきません。<> </>の間に入れるようなものならこれでもうまくいくようです。<p> </p>ならgetElementByIdでもうまくいきました。
というわけで、数量、単価の入力値を取得して
(これらもdocument.getElementByIdでなくdocument.フォーム名.input名にしたほうが統一感があって見栄えはよさそうです)
//数量
let qty = document.getElementById('qty').value;
//単価
let unit_price = document.getElementById('unit_price').value;
それらを計算する
//合計金額=数量*単価
let total = qty * unit_price;
そして計算結果を代入。
document.form1.sub_total.value = '¥' + Math.round(total).toLocaleString() + '-';
Math.roundは四捨五入、toLocaleString()は3桁区切り。結構便利です。
久々のJavaScriptでいろいろ苦労はありましたが、無事に実装完了です。
この記事が気に入ったらサポートをしてみませんか?