※ ChatGPTを利用し、要約された質問です(原文:JavaScriptで電卓を作って一応完成はした)
JavaScriptで作った電卓の質問
2014/11/25 07:27
のですが、分からないコードがあります。以下のコードです。
~HTML~
<form name="dentaku">
<input type="text" name="line" value="0">
<input type="button" value="C" onclick="cl()">
<input type="button" value=" 7 " onclick="val(7)">
<input type="button" value=" 8 " onclick="val(8)">
<input type="button" value=" 9 " onclick="val(9)">
<input type="button" value="÷" onclick="keisan('/')">
<input type="button" value=" 4 " onclick="val(4)">
<input type="button" value=" 5 " onclick="val(5)">
<input type="button" value=" 6 " onclick="val(6)">
<input type="button" value="×" onclick="keisan('*')">
<input type="button" value=" 1 " onclick="val(1)">
<input type="button" value=" 2 " onclick="val(2)">
<input type="button" value=" 3 " onclick="val(3)">
<input type="button" value="-" onclick="keisan('-')">
<input type="button" value=" 0 " onclick="val(0)">
<input type="button" value=" ・ " onclick="val('.')">
<input type="button" value=" + " onclick="keisan('+')">
<input type="button" value="=" onclick="keisan('=')">
</form>
~JavaScript~
total = 0;
input = "";
ope = "+";
flg = 1;
function val(data) {
flg = 0;
input += data;
document.dentaku.line.value = input;
}
function keisan(data) {
if (flg == 0) {
flg = 1;
cf = total + ope + input;
total = eval(cf);
input = "";
document.dentaku.line.value = total;
}
if (data == "=") {
total = 0;
ope = "+";
} else {
ope = data;
}
}
function cl() {
total = 0;
ope = "+";
input = "";
document.dentaku.line.value = total;
}
関係のないコードは省略してあります。また、CSSも省略しますが、テーブル要素を使わず以下の画像のようにインライン要素(input要素)の性質を利用して回り込みをさせています。
長くなりましたが、そこで質問なのですが、
(1)変数ope(operandの略)なのですが、初期値は+なのに演算子ボタン(上記のHTMLコード)をクリックすると、なぜ値がその演算子に変わるのか理由を教えて下さい。
何となく理由は分かりますが、はっきりと理解したいです。
(2)上記のHTMLコードをもっと簡単に書けませんか?
特にonclickをボタンの数だけ書くのは手間です。
質問の原文を閉じる
質問の原文を表示する
お礼
ありがとうございました。 input要素のbutton属性のかわりにbutton要素を使うのですね。コードの中の正規表現は問題ないのですが、イベントリスナーはクロスブラウザ問題でトラウマになりました。しかし、コードは大変勉強になりました。