前提・実現したいこと
Vueで電卓作成をしています。
基本は
https://qiita.com/Naoto9282/items/4db4a854e151f310d517
を参考にしてますが色々変えながらやっています。
発生している問題・エラーメッセージ
上記を参考に以下のソースコードのように演算子を連続させないために色々if文を使って作成しようとしているのですが、+を入力した時はうまくいくのですがその他(-.*,/)を入力すると作動しません。
+を入力したあとに他の演算子を入力しても表示されないのでこの部分は作動していると思われます。
この部分に関するエラーメッセージは特に見当たりません...
該当のソースコード
HTML
1 <table id="app"> 2 <tr> 3 <td colspan="3" class="result"> 4 <input type="text" class="ip-result" id="total" v-model="total.toLocaleString()" readonly /> 5 </td> 6 <td><button value="C" v-on:click="calculationOpe('C')">C</button></td> 7 </tr> 8 <tr> 9 <td> 10 <button class="btn" v-on:click="calculationNum('7')">7</button> 11 </td> 12 <td> 13 <button class="btn" v-on:click="calculationNum('8')">8</button> 14 </td> 15 <td> 16 <button class="btn" v-on:click="calculationNum('9')">9</button> 17 </td> 18 <td> 19 <button class="btn" v-on:click="calculationOpe('/')">÷</button> 20 </td> 21 </tr> 22 <tr> 23 <td> 24 <button class="btn" v-on:click="calculationNum('4')">4</button> 25 </td> 26 <td> 27 <button class="btn" v-on:click="calculationNum('5')">5</button> 28 </td> 29 <td> 30 <button class="btn" v-on:click="calculationNum('6')">6</button> 31 </td> 32 <td> 33 <button class="btn" v-on:click="calculationOpe('*')">×</button> 34 </td> 35 </tr> 36 <tr> 37 <td> 38 <button class="btn" v-on:click="calculationNum('1')">1</button> 39 </td> 40 <td> 41 <button class="btn" v-on:click="calculationNum('2')">2</button> 42 </td> 43 <td> 44 <button class="btn" v-on:click="calculationNum('3')">3</button> 45 </td> 46 <td> 47 <button class="btn" v-on:click="calculationOpe('-')">-</button> 48 </td> 49 </tr> 50 <tr> 51 <td> 52 <button class="btn" v-on:click="calculationNum('0')">0</button> 53 </td> 54 <td> 55 <button class="btn" v-on:click="calculationNum('.')">.</button> 56 </td> 57 <td> 58 <button class="btn" v-on:click="calculationOpe('+')">+</button> 59 </td> 60 <td> 61 <button class="btn" v-on:click="calculationOpe('=')">=</button> 62 </td> 63 </tr> 64 </table>
JavaScript
1calculationOpe: function (num) { // 演算子を押したとき 2 if (num === '=') { // =を押したとき 3 this.total = Function('"use strict";return(' + this.total + ')')(); 4 } else if (num === 'C') { // Cを押したとき 5 this.total = ''; 6 } 7 else if (num === '+') { // +を押したとき 8 var pl = this.total.slice(-1); //計算式中の最後の文字を取得 9 if (pl.includes('+','-','*','/')) { //最後の文字が+,-,*,/のとき 10 num = ''; //+の入力を無効 11 } else { //最後の文字が+じゃないとき 12 this.total += num; //そのまま入力 13 } 14 } 15 else if (num === '-') { // -を押したとき 16 var mi = this.total.slice(-1); //計算式中の最後の文字を取得 17 if (mi.includes('+','-','*','/')) { //最後の文字が+,-,*,/のとき 18 num = ''; //-の入力を無効 19 } else { //最後の文字が-じゃないとき 20 this.total += num; //そのまま入力 21 } 22 } 23 else if (num === '*') { // *を押したとき 24 var mu = this.total.slice(-1); //計算式中の最後の文字を取得 25 if (mu.includes('+','-','*','/')) { //最後の文字が+,-,*,/のとき 26 num = ''; //*の入力を無効 27 } else { //最後の文字が*じゃないとき 28 this.total += num; //そのまま入力 29 } 30 } 31 else if (num === '/') { // /を押したとき 32 var de = this.total.slice(-1); //計算式中の最後の文字を取得 33 if (de.includes('+','-','*','/')) { //最後の文字が+,-,*,/のとき 34 num = ''; ///の入力を無効 35 } else { //最後の文字が/じゃないとき 36 this.total += num; //そのまま入力 37 } 38 } 39},
試したこと
+では作動するということは同一の関数内に演算に関する記述してはいけないのかと思い演算ごと(+,-,*,/)で関数を作成し直してみましたが変わらず。言語化してみて変な部分が無いかチェックしたのですが現時点での私からすると特に変なところは見当たらず...
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/10 18:55