- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个可以工作的计算器,直到我在显示输出中添加了一个方程历史行。现在唯一可以正常工作的操作符是除法按钮。
当我执行除法方程(例如 8/9)时,它会按照我想要的方式工作。显示输出的顶行仅显示当前数字或运算符(或答案,如果问题已完成),然后底行显示完整的方程。但是,当我尝试执行除法以外的任何操作时,计算器无法正常工作。
相反,它在顶部和底部显示完整的方程,当我点击等于按钮时,我在控制台中收到以下错误消息:
"Cannot read property 'toString' of undefined"
这让我相信我的正则表达式 chop 小数点后的数字导致了问题,但在我添加equation
变量之前它就已经工作了。我也不明白为什么除法是唯一正常运行的运算符。有人可以解释为什么会发生这种情况和/或我做错了什么吗?
最佳答案
这是您第一个问题的答案:为什么其他操作不起作用。
1:您正在检查 if($('.operator, #decimal').data('clicked')) ,它将给出第一个匹配的运算符,并且仅适用于除法。
2:当单击操作符时,您正在设置
$(this).data('clicked', true);
这意味着在除法以外的情况下,第 1 点和第 2 点将讨论不同的运算符。
我尝试通过在运算符(operator)按钮单击上设置运算符(operator)测试来修复它,并检查它是否为空,并在同等按钮单击时将其设置为空。
$(document).ready(function() {
var num = "", operator = "", num2 = "", equation = "";
var output = $("#output");
output.text("0");
var history = $("#history");
history.text("0");
$('.numbers').click(function() {
if(operator !== "") {
num2 += this.value;
equation = num + num2;
output.text(num2);
history.text(equation);
} else {
num += this.value;
output.text(num);
history.text(num);
}
checkOperator();
checkLimit();
});
$('.operator, #decimal').click(function() {
$(this).data('clicked', true);
num += this.value;
operator = this.value;
output.text(operator);
history.text(num);
checkOperator();
});
// checks if last input was an operator and prevents two from being used twice in a row
function checkOperator() {
if (num.slice(-1) === "+" || num.slice(-1) === "-" || num.slice(-1) === "/" || num.slice(-1) === "*") {
$(".operator").attr("disabled", true);
} else if (num.slice(-1) === ".") {
$("#decimal").attr("disabled", true);
} else {
$(".operator").removeAttr("disabled");
$("#decimal").removeAttr("disabled");
history.text(num);
}
};
function checkLimit() {
if (num.length > 10) {
num = "";
num2 = "";
operator = "";
output.text("0");
history.text("Digit Limit Reached");
}
};
$('#ac').click(function() {
num = "";
num2 = "";
equation = "";
operator = "";
output.text("0");
history.text("0");
operator="";
});
$('#ce').click(function() {
num = num.slice(0, -1);
if (num === "") {
output.text("0");
history.text("0");
} else {
output.text(num);
history.text(num);
}
});
$('#equals').click(function() {
num = eval(equation);
num = num.toString().match(/^-?\d+(?:\.\d{0,8})?/)[0];
output.text(num);
history.text(equation + " = " + num);
operator = "";
num2 = "";
$(".operator").removeAttr("disabled");
});
$(document).keypress(function(event) {
var keycode = (event.keyCode ? event.keyCode : event.which);
if (keycode === 49) {
$("#one").click();
} else if (keycode === 50) {
$("#two").click();
} else if (keycode === 51) {
$("#three").click();
} else if (keycode === 52) {
$("#four").click();
} else if (keycode === 53) {
$("#five").click();
} else if (keycode === 54) {
$("#six").click();
} else if (keycode === 55) {
$("#seven").click();
} else if (keycode === 56) {
$("#eight").click();
} else if (keycode === 57) {
$("#nine").click();
} else if (keycode === 48) {
$("#zero").click();
} else if (keycode === 97) {
$("#ac").click();
} else if (keycode === 99) {
$("#ce").click();
} else if (keycode === 61 || keycode === 13 || keycode === 187) {
$("#equals").click();
} else if (keycode === 43) {
$("#add").click();
} else if (keycode === 45) {
$("#subtract").click();
} else if (keycode === 42 || keycode === 120) {
$("#multiply").click();
} else if (keycode === 47) {
$("#divide").click();
} else if (keycode === 110 || keycode === 190) {
$("#decimal").click();
}
});
});
* {
margin: 10px auto;
}
body {
background-color: #202020;
font-family: 'Days One', sans-serif;
}
#screen {
background: #94AFB5;
width: 400px;
height: 100px;
font-size: 50px;
border-radius: 10px;
padding-right: 5px;
}
#history {
font-size: 12pt;
padding-right: 5px;
}
.calculator {
font-size: 25px;
position: relative;
text-align: center;
width: 410px;
height: 550px;
padding: 2px;
background: #5591C3;
border-radius: 15px;
font-weight: bold;
margin-top: 2%;
margin-left: auto;
margin-right: auto;
}
button {
margin: 2px;
width: 85px;
height: 55px;
background-color: #084D87;
color: #D17900;
border-radius: 10px;
text-align: center;
cursor: pointer;
outline: none;
border: none;
box-shadow: 0 5px #053C6A;
padding: 5px;
vertical-align: top;
}
button:active {
background-color: #084D87;
box-shadow: 0 5px #053C6A;
transform: translateY(4px);
}
#zero {
width: 181px;
}
#ac, #ce {
background-color: #EC0000;
box-shadow: 0 5px #BC0000;
color: #814B00;
}
.last-row {
position: absolute;
bottom: 16px;
left: 31px;
}
#equals {
height: 125px;
font-size: 45px;
}
.footer {
font-size: 10pt;
color: #D17900;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<body>
<div class="container">
<div class="calculator">
<h3>ELECTRONIC CALCULATOR</h3>
<div class="row">
<div id="screen" class="text-right">
<div id="output" class="text-right"></div>
<div id="history" class="text-right"></div>
</div>
</div>
<div class="row">
<button id="ac">AC</button>
<button id="ce">CE</button>
<button class="operator" id="divide" value="/">÷</button>
<button class="operator" id="multiply" value="*">×</button>
</div>
<div class="row">
<button class="numbers" id="seven" value="7">7</button>
<button class="numbers" id="eight" value="8">8</button>
<button class="numbers" id="nine" value="9">9</button>
<button class="operator" id="subtract" value="-">-</button>
</div>
<div class="row">
<button class="numbers" id="four" value="4">4</button>
<button class="numbers" id="five" value="5">5</button>
<button class="numbers" id="six" value="6">6</button>
<button class="operator" id="add" value="+">+</button>
</div>
<div class="row">
<button class="numbers" id="one" value="1">1</button>
<button class="numbers" id="two" value="2">2</button>
<button class="numbers" id="three" value="3">3</button>
<button id="equals">=</button>
</div>
<div class="row last-row">
<button class="numbers" id="zero" value="0">0</button>
<button id="decimal" value=".">.</button>
</div>
</div>
</div>
</body>
fiddle :https://jsfiddle.net/27rprs1g/
关于javascript - JavaScript 计算器中只有除法按钮可以正常工作。 "Cannot read property ' toString' of undefined“其他运算符的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41657097/
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
var urlsearch = "http://192.168.10.113:8080/collective-intellegence/StoreClicks?userid=" + userId +
我有一个非常奇怪的问题,过去两天一直让我抓狂。 我有一个我试图控制的串行设备(LS 100 光度计)。使用设置了正确参数的终端(白蚁),我可以发送命令(“MES”),然后是定界符(CR LF),然后我
我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。 显然,当我使用 Excel 时,我不能简单地使用与可
我开发了简单的 REST API - https://github.com/pavelpetrcz/MandaysFigu - 我的问题是在本地主机上,WildFly 16 服务器的应用程序运行正常。
我遇到了奇怪的情况 - 从 Django shell 创建一些 Mongoengine 对象是成功的,但是从 Django View 创建相同的对象看起来成功,但 MongoDB 中没有出现任何数据。
我是 flask 的新手,只编写了一个相当简单的网络应用程序——没有数据库,只是一个航类搜索 API 的前端。一切正常,但为了提高我的技能,我正在尝试使用应用程序工厂和蓝图重构我的代码。让它与 pus
我的谷歌分析 JavaScript 事件在开发者控制台中运行得很好。 但是当从外部 js 文件包含在页面上时,它们根本不起作用。由于某种原因。 例如; 下面的内容将在包含在控制台中时运行。但当包含在单
这是一本名为“Node.js 8 the Right Way”的书中的任务。你可以在下面看到它: 这是我的解决方案: 'use strict'; const zmq = require('zeromq
我正在阅读文本行,并创建其独特单词的列表(在将它们小写之后)。我可以使它与 flatMap 一起工作,但不能使它与 map 的“子”流一起工作。 flatMap 看起来更简洁和“更好”,但为什么 di
我正在编写一些 PowerShell 脚本来进行一些构建自动化。我发现 here echo $? 根据前面的语句返回真或假。我刚刚发现 echo 是 Write-Output 的别名。 写主机 $?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我
我对 javascript 很陌生,所以很难看出我哪里出错了。由于某种原因,我的功能无法正常工作。任何帮助,将不胜感激。我尝试在外部 js 文件、头部/主体中使用它们,但似乎没有任何效果。错误要么出在
我正在尝试学习Flutter中的复选框。 问题是,当我想在Scaffold(body :)中使用复选框时,它正在工作。但我想在不同的地方使用它,例如ListView中的项目。 return Cente
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我有一个组合框,其中包含一个项目,比如“a”。我想调用该组合框的 Action 监听器,仅在手动选择项目“a”完成时才调用。我也尝试过 ItemStateChanged,但它的工作原理与 Action
你能看一下照片吗?现在,一步前我执行了 this.interrupt()。您可以看到 this.isInterrupted() 为 false。我仔细观察——“这个”没有改变。它具有相同的 ID (1
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我正在尝试在我的网站上设置一个联系表单,当有人点击发送时,就会运行一个作业,并在该作业中向所有管理员用户发送通知。不过,我在失败的工作表中不断收到此错误: Illuminate\Database\El
我是一名优秀的程序员,十分优秀!