現在、以下のようなコードで電卓を作成しているのですが。
このコードだと足し算だけならできたのですが
引き算をすると二週目の計算に不具合が生じてしまいます。
例えばどのような不具合かと言うと
30 - 10 = 20 ←この段階では問題はありません。
しかし、この答えからさらに次の計算を行うと
20 - 5 = -15 ←このようになぜか負の値になってしまいます。
自分なりに何が原因なのかを調べてみたのですが
足し算のほうは問題なく表示されるだけに
なぜどこからとも無く-の記号が現れるのか分からない状況です。
ちなみにかけ算も試してみたのですがかけ算の場合は2週目の計算結果が0に
なってしまいます。
この問題はどのように記述すれば解決できるのでしょうか?
分かる方お願いします。
~~HTML~~
<body>
<span>
<div></div>
<section></section>
<section>
<ul> <li></li><li></li><li></li><li>AC</li> </ul>
<ul> <li>1</li><li>2</li><li>3</li><li>+</li> </ul>
<ul> <li>4</li><li>5</li><li>6</li><li>-</li> </ul>
<ul> <li>7</li><li>8</li><li>9</li><li>×</li> </ul>
<ul> <li>0</li><li>.</li><li>=</li><li>÷</li> </ul>
</section>
</span>
</body>
~~jQuery~~
/*数字の入力*/
$(".num").click(function(){
var num = $(this).text();
if(inputZ.text() == "" && num == 0){
inputZ.append(num + ".");
}
else{
inputZ.append(num);
}
});
/*リセット*/
$(".reset").click(function(){
inputZ.text("");
divTxt = Div.text("");
});
/*加算*/
$(".addition").click(function(){
if(inputZ.text() == ""){
leftFml_01 = rightFml_01
}
else{
leftFml_01 = parseFloat(inputZ.text());
}
inputZ.text("");
divTxt_01 = Div.text(leftFml_01 + " +");
Ans.click(function(){
if(inputZ.text() == ""){
rightFml_01 = leftFml_01;
}
else{
rightFml_01 = parseFloat(inputZ.text());
}
reply_01 = leftFml_01 + rightFml_01;
inputZ.text(reply_01);
leftFml_01 = null;
divTxt_01.text("");
});
});
/*減算*/
$(".subtraction").click(function(){
if(inputZ.text() == ""){
leftFml_02 = rightFml_02
}
else{
leftFml_02 = parseFloat(inputZ.text());
}
rightFml_02 = null;
inputZ.text("");
divTxt_02 = Div.text(leftFml_02 + " -");
Ans.click(function(){
if(inputZ.text() == ""){
rightFml_02 = leftFml_02;
}
else{
rightFml_02 = parseFloat(inputZ.text());
}
reply_02 = leftFml_02 - rightFml_02;
inputZ.text(reply_02);
leftFml_02 = null;
divTxt_02.text("");
});
});
});
No.1ベストアンサー
- 回答日時:
演算が行われる度に
イベントリスナが
Ans.click(function(){
で登録されているからです
新しいイベントリスナを登録しても
古いのが消えたりはしません
どんどん溜まっていき、1回のクリックでいくつも呼ばれることになります
その結果
1番目に呼ばれたイベントリスナで
reply_02 = leftFml_02 - rightFml_02;
が例えば
30 - 10
で
reply_02 に20が入りinputZが20になります
次は
inputZがrightFml_02になり、leftFml_02 は nullになっているので
null - 20
で
inputZが-20になります
もしイベントリスナが3つ登録されていれば
さらに
null - -20
となって
20に
4つならば
また-20になります
こういった現象がおきています
簡単なのは
unbind("click")
を全ての
Ans.click(function(){
の前において
イベントリスナをクリアすることです
回答ありがとうございます。
まだ勉強不足でイベントリスナというものを知らないので全ては理解できませんが
それは自分で調べるとして
未熟な僕でもだいたいは分かるくらい丁寧に回答して頂いてることは分かりましたし
原因を教えていただけたので何倍も調べやすくなりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アコーディオンメニューの開閉制御
-
javascriptで、クリックしたら...
-
複数の画像をランダム(シャッ...
-
JQuery UIで、表示したタブの中...
-
クリックした<a>タグのみにClas...
-
アコーディオン自動開閉メニュ...
-
jQueryセレクタ/複数要素の指...
-
同一ページ内で、任意の文字列...
-
JQueryタブのアクティブ アン...
-
【jQuery】hoverしたn秒後にイ...
-
MAX関数を使ってからLEFT JOIN...
-
スタイルシートで画面を上下に...
-
JavaScript スライドの画像にリ...
-
textareaに画像を表示したい
-
javascriptでスタイルを動的に...
-
キャラクターがぴょこんと飛び...
-
OpenCV での画素値の比較について
-
HTMLで条件分岐はできますか?
-
Ctrl+F(検索)の窓を出したいの...
-
色の変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
クリックした<a>タグのみにClas...
-
JQueryタブのアクティブ アン...
-
javascriptでEnterキーをtabキ...
-
「jQuery」アコーディオンメニ...
-
【jQuery】遅延実行(タイムラ...
-
ネストされたチェックボックス...
-
【javascript で動的に a タグ...
-
jquery ドロップダウンメニュー...
-
文字と数字が混在する要素のsor...
-
Jquery の slide.toggle で要素...
-
【jQuery】hoverしたn秒後にイ...
-
チェックボックスに入っている...
-
クリックで表示、非表示するメ...
-
同一ページ内で、任意の文字列...
-
オンマウスで画像ロールオーバ...
-
javascriptで、クリックしたら...
-
PHPでログインフォーム
-
<li>タグの順番を入れ替える方法
-
jQuery タブメニューへのダイ...
おすすめ情報