質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1232閲覧

getElementById、addEventListenerを使用し、価格を計算するプログラム

chi4

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/04/22 15:35

前提・実現したいこと

JavaScriptで価格と個数を入力し、合計金額を計算できるプログラムを作っています。getElementById、addEventListenerを利用したいです。

発生している問題・エラーメッセージ

入力された値が取得されず、何も数値がない状態

エラーメッセージ

該当のソースコード

<!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>合計金額を計算</title> </head> <body> <form> <label> <input type="number" id='kakaku' name="kakaku" >価格 </label> <br> <label> <input type="number" id='kosu' name="kosu">個数 </label> <br> <input type="button" value="計算する" name="btn" id=btn > onclick="calc();" </form> <script> const kakaku = document.getElementById('kakaku').value; const kosu = document.getElementById('kosu').value; var goukei= document.getElementById("btn").addEventListener("click",function(){ var g = kakaku*kosu; return console.log(g); }); </script> </body> </html>

試したこと

input にvalue=10 など数値をあらかじめ入力しておくとその数値が計算され、新たに入力した数値を計算することができない。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

<script> var goukei= document.getElementById("btn").addEventListener("click",function(){ const kakaku = document.getElementById('kakaku').value; const kosu = document.getElementById('kosu').value; var g = kakaku*kosu; return console.log(g); }); </script>

投稿2021/04/22 16:02

zushi0905

総合スコア683

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chi4

2021/04/25 07:21

なるほど!解決しました。 ありがとうございます!
guest

0

function(){} スコープの中のkakaku 、kosu と、その上で定義しているkakaku 、kosu が別ものだから発生しています。
JavaScript特有の「変数の巻き上げ(hoisting)」が起こっていると思います。

知らないと怖い「変数の巻き上げ」とは?

投稿2021/04/23 04:12

UnripeTomato

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2021/04/24 02:44

いえ、変数としては同一で、実行タイミングの問題かと。 kakaku,kosuは、ロード時に評価され、値のみを保持し、画面上の入力を反映しません。 クリック時に関数が実行されますが、ロード時の値をそのまま使うので、衆力はロード時の値のままとなっています。 zushi0905さんの回答のように、クリック時に、評価して、その時点での値を取得する必要があります。
UnripeTomato

2021/04/24 04:29

なるほど・・・ ご指摘いただきありがとうございます。 また誤った回答をしてしまい申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問