8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

手数料計算のためのjavascript実装手順

Last updated at Posted at 2021-04-16

20210416-140042.png
furimaアプリの実装中です。

Javascriptの手数料計算自動化の実装中です。

Javascriptファイルを作る

①-1:furimaApp/app/javascript/packs内にファイルを置きます。
①-2:application.jsファイル内に記述呼び出しの記述をします

書き方
const 変数 = require( モジュール名 );

①−3ブラウザ上いったんファイル呼び出し確認を行います
(注意)railsファイルがきちんとかけていて呼び出せる(綺麗に表示できていること)が前提です。

fee_calculation.js
window.addEventListener('load', () => {
  console.log("OK");
});

###①−4ブラウザを開いたら「command+option+j」

20210416-140042.png

consoleタブでOKとファイル名があれば表示確認OKです。

①販売価格を Viewファイルから取得する

@amamamaouさんありがとうございます。参考になります。

https://qiita.com/amamamaou/items/25e8b4e1b41c8d3211f4

目的 メソッド 返り値
要素が取得 document .getElementById( ” id 名 ” ); HTMLElement / null

参照:UX MILKさん 「JavaScriptでidから要素を取得する方法:getElementById()」

https://uxmilk.jp/11593

HTML
体重を入力して下さい:<input type="text" id="id01"><br/>
身長をメートルで入力して下さい:<input type="text" id="id02"><br/>
<input type="button" value="計算" onclick="calcBmi();">
javascript
//入力された体重と身長からBMI値を計算するプログラム
function calcBmi(){
        // idが「id01」のテキストボックスに入力された値を取得して変数weightに代入
	var weight = document.getElementById('id01').value; 
	var height = document.getElementById('id02').value;
	weight = Number(weight); // 入力された文字列を数値に変換する
	height = Number(height); // 入力された文字列を数値に変換する
	var bmi = height / (weight * weight); // BMIを計算
	alert("あなたのBMI値は" + bmi + "です。"); // 結果を表示
}

②どの時点で取得(発火)するのか決める:イベントハンラー

@_ayk_studyさん参考にさせていただきました。

https://qiita.com/_ayk_study/items/519bb661a746f96727ce

addEventListenerの書き方

javascript
オブジェクト(対象の要素).addEventListener('イベント名',function(){処理内容},false)

イベントとはトリガー(拳銃の引き金)のことでいつ発生させるのかのきっかけ【タイミング】のことです。

参考

イベント種類 内容
load Webページの読み込みが完了した時に発動(画像などのリソースすべて含む)
click マウスボタンをクリックした時に発動
mousedown マウスボタンを押している時に発動
mouseup マウスボタンを離したときに発動
mousemove マウスカーソルが移動した時に発動
keydown キーボードのキーを押したときに発動
keyup キーボードのキーを離したときに発動
keypress キーボードのキーを押している時に発動
submmit フォームのsubmitボタンを押したときに発動
scroll 画面

①+②(これはエラーになります)

fee_calculation.js
const priceInput = document.getElementById("金額を入力する場所のid");
priceInput.addEventListener("input", () => {
   console.log("イベント発火");
})

これでサーバーを立ち上げると
20210416-154858.png

20210416-154924.png

問題点1document.getElementByIdはHTMLを一度読み込んでからid取得させるが正解でした

fee_calculation.js
window.addEventListener('load', () => {
    const priceInput = document.getElementById("item-price");
    priceInput.addEventListener("input", () => {
      console.log("イベント発火");
    })
  });

ちゃんとイベント発火しました。

20210416-162337.png

4.さらに消費税自動入力にけて行きます

fee_calculation.js
window.addEventListener('load', () => {
     const priceInput = document.getElementById("item-price");
      priceInput.addEventListener("input", () => {
       const inputValue = priceInput.value;
       console.log(inputValue);
    })
  });

constはconstを先頭につけて変数を宣言します。

使い方
const 変数名 = 変数に入れる値;

*constとは値書き換えを禁止した変数を宣言する方法。
変数・関数共に基本キャメルケース(camelCase)を用いる。ここではinputValue/priceInputがそれ。

5.いい感じに仕上がってます

価格に入力すると発火します

20210416-164623.png

6.JavaScriptでページ内の特定の位置に文字を出力する

iPentec.com さまありがとうございます。

https://www.ipentec.com/document/javascript-get-tag-element-and-access-element

コード例

html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript">
        window.onload = function onLoad() {
            target = document.getElementById("output");
            target.innerHTML = "Penguin";
        }
    </script>
    <style>
    <中略>
    </style>
</head>
<body>
    <div class="header-footer">ヘッダです</div>
    <div class="contents" id="output"></div>
    <div class="header-footer">フッタです</div>
</body>
</html>

7.結果

20210416-171257.png

javascript
target = document.getElementById("output");

html
<div class="contents" id="output"></div>
の位置を取得します。

次に

javascript
target.innerHTML = "Penguin";

で先ほどのdivの位置に”Penguin”という文字列を挿入します。

(1)ここから表示場所を特定して表示させます。
const addTaxDom = document.getElementById("販売手数料を表示する場所のid");
addTaxDom.innerHTML = "入力した金額をもとに販売手数料を計算する処理"

(2)計算方法
Math.round(priceInput * 0.1 )

8.でもエラー

@haspyokoさんに感謝。全く同じエラーでした。

まずはコンソールでpriceInputの中身から確認

javascript
console.log(priceInput)

20210416-175513.png

変数priceInputの中身は

<input class="price-input" id="item-price" placeholder="例)300" type="text" name="item[price]">

という文字列でした。

これは掛け算を行っても数値は出ません。

ちなみに
20210416-180253.png

###JavascriptでNaNは非数「Not-A-Number」を表す値です。

9.完成

あとは変数priceInputの中身を取り出すだけなので 「.value」を後ろにつけるだけ

javascript
window.addEventListener('load', () => {
     const priceInput = document.getElementById("item-price");
    //  console.log(priceInput)
      priceInput.addEventListener("input", () => {
        const addTaxDom = document.getElementById("add-tax-price");
        // console.log(priceInput.innerHTML);
        addTaxDom.innerHTML = Math.round(priceInput.value * 0.1 );
        const addPofitDom = document.getElementById("profit");
        // console.log(priceInput.innerHTML);
        addPofitDom.innerHTML = Math.round(priceInput.value - Math.round(priceInput.value * 0.1 ))
    })
  });

完成です
長い間お付き合いいただきありがとうございます。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?