JavaScriptで計算フォームを作る方法
はじめに
目次
JavaScriptで計算フォームを作る
今回、まずは簡単に「2つの値を取る足し算」の計算フォームを作ってみます。
計算フォームを作る場合のJavaScriptの処理の流れを簡単に説明すると以下のとおりです。
- 入力した2つの値を取得する(getElementById)
- ボタンを押した時のイベントリスナーを設定する(addEventListener)
- ❶の値を整数(数値)に直して(parseInt)、加算する
- ❸をHTMLに出力する
HTMLとJavaScriptのソースは以下のとおりです。
CSSも記述するとページが長くなるので割愛しています
HTML
<form> <dl class="p-card"> <dt class="p-card_dt"><input type="text" id="math01_01" class="p-input_text"><span class="p-text_plus">+</span><input type="text" id="math01_02" class="p-input_text"></dt> <dd class="p-card_button"><input id="btn01" class="p-input_button" type="button" value="計算"></dd> <dd class="p-card_content">答えは<span id="result01" class="p-span_result"></span>です</dd> </dl> </form>
JavaScript
<script> let value01_01 = document.getElementById('math01_01'); let value01_02 = document.getElementById('math01_02'); document.getElementById('btn01').addEventListener('click',function() { var result01 = parseInt(value01_01.value) + parseInt(value01_02.value) ; document.getElementById('result01').textContent = result01; }); </script>
簡単に説明すると、「2つのテキストボックスの値を整数に変換し、ボタンを押したら値の合計(和)をテキストとして出力する」よう設定しています。
今回使用した主なメソッド等はこちらです
使用したメソッド等
メソッド等 | 概要 |
---|---|
parseInt() | 文字列の引数を整数に変換するメソッド |
textContent | テキストの情報を取得・設定するプロパティ |
できあがったもの
これで計算フォームはできましたが、「計算」ボタンを押すがちょっと面倒に感じたので、ボタンを押さなくても計算できるようにJavaScriptを変更してみます。
ボタンを押さなくても計算できるようにする
HTMLに関しては内容は全く同じですが、JavaScriptがソース中のIDを取得するように設定してるので、ID名のみ変更しています。
先ほどはaddEventListener('click')
と設定しているため、クリックをした時にイベントが発生する(数値が出力される)ようになっています。
イベントリスナーをkeyup
に設定するとクリックをしなくても数値を出力できるようになります。
addEventListener
で設定できるイベントはclick
やkeyup
以外にも以下のような物があります(これ以外にもあります)。
主なイベントリスナー
値 | 概要 |
---|---|
click | 対象の要素をクリックした時にイベントが発生 |
dblclick | 対象の要素をダブルクリックした時にイベントが発生 |
keyup | キー(キーボード)を離した時にイベントが発生 |
scroll | ウインドウをスクロールさせて時にイベントが発生 |
load | ページの読み込みが完了した時にイベントが発生 |
JavaScriptのソースは以下のとおりです。
JavaScript
<script> let value02_01 = document.getElementById('math02_01'); let value02_02 = document.getElementById('math02_02'); document.addEventListener('keyup',function() { //この行を変更 var result02 = parseInt(value02_01.value) + parseInt(value02_02.value) ; document.getElementById('result02').textContent = result02; }); </script>
できあがったもの
フォームに2つの値を入れると自動的に計算できるようになりましたが、未入力の場合「NaN」というテキストが出力されるようになってしまいました。
見栄えが悪いので、今度は「NaN」が表示されなくなるように変更してみます。
「NaN」を表示しないようにする
そもそも「NaN」とは「Not a Number」の略で、「数値ではない(非数)」という意味です。
つまり、今回の場合だと「本来、足し算の結果としての数値が取得されるはずなのに、『何も無い値』が取得された事によって出力された値」になります。
それでは、この「NaN」を出力させないようにする方法ですが、流れとしては以下になります。
- if関数で値がNaNの時とそうで無い時の条件分岐をする
- 値がNaNの時は何も出力させず(空の値を出力)、数値がある時は数値を出力させる
値がNaNかそうで無いかを判定するにはNumber.isNaNcode
メソッドを使用します。
Number.isNaNメソッド
メソッド | 概要 |
---|---|
Number.isNaN() | ()内の値がNaNかどうかをは判定(値が「NaN」だったらtrueを返す) |
Number.isNaNcode
にif
構文を組み合わせたJavaScriptは以下のとおりです。
JavaScript
<script> let value03_01 = document.getElementById('math03_01'); let value03_02 = document.getElementById('math03_02'); document.addEventListener('keyup',function() { var result = parseInt(value03_01.value) + parseInt(value03_02.value) ; if(Number.isNaN(result) ) { document.getElementById('result03').textContent = ''; console.log(result); } else { document.getElementById('result03').textContent = result; } }); </script>
できあがったもの
これで「NaN」が出力されなくなりました。
この計算フォームのスクリプトを応用して、PFCバランスの目標値を調べる計算フォームを作ってみましたので、参考までにどうぞ。