- ベストアンサー
JavaScriptで作った電卓の質問
- JavaScriptで作成した電卓について質問があります。
- 変数opeの初期値と演算子ボタンの関係について理解したいです。
- HTMLコードを簡潔にする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1) keisanが呼ばれて dataが=以外だったらope = dataになってるから。 dataにはonclickで指定した値が入っている。 (2)いちいちonclickが面倒となると、こんな感じかな。 ただhtmlに書くものは増える <input type="text" name="line" value="0"> <button type="button" value="C">C</button> <button type="button" value="7"> 7 </button> <button type="button" value="8"> 8 </button> <button type="button" value="9"> 9 </button> <button type="button" value="/">÷</button> <button type="button" value="4"> 4 </button> <button type="button" value="5"> 5 </button> <button type="button" value="6"> 6 </button> <button type="button" value="*">×</button> <button type="button" value="1"> 1 </button> <button type="button" value="2"> 2 </button> <button type="button" value="3"> 3 </button> <button type="button" value="-">-</button> <button type="button" value="0"> 0 </button> <button type="button" value="."> ・ </button> <button type="button" value="+"> + </button> <button type="button" value="=">=</button> <script> var total = 0; var input = ""; var ope = "+"; var flg = 1; document.addEventListener('DOMContentLoaded', function(){ var elems = document.querySelectorAll('button'); for (var i = 0; i < elems.length; i ++) { elems[i].addEventListener('click', function(){ var value = this.value; if (value.match(/[0-9]+/)) { flg = 0; input += this.value; document.dentaku.line.value = input; } else if (value === 'C') { total = 0; ope = "+"; input = ""; document.dentaku.line.value = total; } else { if (flg == 0) { flg = 1; cf = total + ope + input; total = eval(cf); input = ""; document.dentaku.line.value = total; } if (value == "=") { total = 0; ope = "+"; } else { ope = value; } } }, false); } }, false); </script>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
まぁ余計なお世話ですので不要なら聞き流してほしいのですが evalを使っているウチはプログラミングは上達しないので できれば別の書き方をされることをお勧めします 今回のケースであればswitchで場合分けをするのが妥当かと
お礼
ありがとうございます。 仰るようにevalは良くないと私が持っているJavaScriptの本にも書かれていました。その本には”eval is evil”なんて書かれていました。それはevalがJavaScriptプログラム(特に大規模なもの)において、予想だにしないバグを発生させるからだそうですが、私のようなアマチュアにとってはけっこう重宝します。例えば、”3*5”といった文字列の計算式の計算はparseIntでは無理で、evalではないと無理なんですね。しかし一度、”switch 電卓"でググってみます。
お礼
ありがとうございました。 input要素のbutton属性のかわりにbutton要素を使うのですね。コードの中の正規表現は問題ないのですが、イベントリスナーはクロスブラウザ問題でトラウマになりました。しかし、コードは大変勉強になりました。