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

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

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

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

Q&A

2回答

1128閲覧

JavaScriptで電卓を作る (=の実装)

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

1クリップ

投稿2020/09/22 08:33

編集2020/09/22 10:20

JavaScript初学者です。
現在、動画サイトや記事を元に、電卓を製作しています。

途中まではうまく行ったのですが、=を押すとエラーが帰ってきてしまいます。
この場合、どこがおかしいのでしょうか…
ご教授いただけますと幸いです。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <title>電卓</title> </head> <body> <div class="container"> <div id="total" class="display"></div> <div class="btn-box" > <button onclick="reset()" class="reset-btn">A C</button> <button onclick="set(this)" >/</button> <button onclick="set(this)">7</button> <button onclick="set(this)">8</button> <button onclick="set(this)">9</button> <button onclick="set(this)">*</button> <button onclick="set(this)">4</button> <button onclick="set(this)">5</button> <button onclick="set(this)">6</button> <button onclick="set(this)">-</button> <button onclick="set(this)">1</button> <button onclick="set(this)">2</button> <button onclick="set(this)">3</button> <button onclick="set(this)">+</button> <button onclick="set(this)">0</button> <button onclick="set(this)">.</button> <button onclick="calc(this)" class="equal">=</button> </div> </div> <script src="js/main.js"></script> </body> </html>
'use strict'; { var total = document.getElementById('total'); function set(nums) { total.textContent = total.textContent + nums.textContent; } function calc() { total.textContent = new Function("return " + total.textContent)(); } function reset() { total.textContent = ""; } }

リンク内容

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

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

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

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

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

maisumakun

2020/09/22 09:00

どのようなエラーになりましたか?
m.ts10806

2020/09/22 09:24

>この場合、どこがおかしいのでしょうか… エラーに現れている内容がおかしい  ということになります。 エラー読んだのでしょうか(そしてエラーから本当に何も得られなかったのでしょうか)。
退会済みユーザー

退会済みユーザー

2020/09/22 09:35

Uncaught SyntaxError: Invalid or unexpected token at new Function (<anonymous>) at calc (main.js:11) at HTMLButtonElement.onclick (index.html:36) と表示されます。。
退会済みユーザー

退会済みユーザー

2020/09/22 09:37

vscode ではエラー?が出ないのですが、 コンソールの方で❌が出ます。
m.ts10806

2020/09/22 09:52

そもそも、何を参考に書きましたか? どの程度提示されたコードを理解しているのでしょうか。
gentaro

2020/09/22 09:53

> 'use script'; ひょっとして use strict のつもりでしょうか?
退会済みユーザー

退会済みユーザー

2020/09/22 10:20

直しました!ありがとうございます
m.ts10806

2020/09/22 20:47

んで、なぜ退会した 解決してないのに…
guest

回答2

0

せっかく勉強しているならhtmlにjsを埋め込まない方がよいですね
evalをつかっていいかどうかとか、こまかい入力調整とかありますが
おいおいご自身の勉強材料としてください
buttonのtextContentに全角文字をつかっているなら計算に利用する文字は
カスタムデータなどで与えた方がよいでしょう

  • calc.js

javascript

1'use strict'; 2 3window.addEventListener('DOMContentLoaded', ()=>{ 4 const total = document.querySelector('#total'); 5 const set=(nums)=>{ 6 var txt=total.textContent; 7 var num=nums.dataset["num"]; 8 if(txt==="0" && num!==".") txt=""; 9 total.textContent = txt + num; 10 } 11 document.querySelectorAll('[data-num]').forEach(x=>{ 12 x.addEventListener('click',()=>{ 13 set(x); 14 }); 15 }); 16 document.querySelector('.equal').addEventListener('click',()=>{ 17 total.textContent = eval(total.textContent); 18 }); 19 document.querySelector('.reset-btn').addEventListener('click',()=>{ 20 total.textContent = "0"; 21 }); 22});
  • mypage.html

html

1<script src="calc.js"></script> 2 <div class="container"> 3 4 <div id="total" class="display">0</div> 5 <div class="btn-box" > 6 7 <button class="reset-btn">A C</button> 8 <button data-num="/">/</button> 9 <button data-num="7"></button> 10 <button data-num="8"></button> 11 <button data-num="9"></button> 12 13 <button data-num="*"></button> 14 <button data-num="4"></button> 15 <button data-num="5"></button> 16 <button data-num="6"></button> 17 18 <button data-num="-">-</button> 19 <button data-num="1"></button> 20 <button data-num="2"></button> 21 <button data-num="3"></button> 22 23 <button data-num="+">+</button> 24 <button data-num="0"></button> 25 <button data-num=".">.</button> 26 <button class="equal">=</button> 27 </div> 28</div>

投稿2020/09/22 11:29

yambejp

総合スコア114928

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

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

0

calc関数の中で使われているtotal変数の定義がないからエラーが出てるんじゃないですか?
エラーメッセージに詳細が書かれていますよ。

投稿2020/09/22 10:56

geta

総合スコア241

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問