【发布时间】:2016-02-19 15:40:54
【问题描述】:
尝试制作一个简单的 javascript 计算器并遇到问题,当按下按钮并激活功能控制台时反映 NaN。无法弄清楚什么是问题。功能以某种方式工作是不正确的。代码在 sn-p 中。
window.onload = function() {
var screen = document.getElementById("screen");
var keys = document.getElementsByClassName("keys");
var span = document.getElementsByTagName("span");
(function() {
for (var i = 0; i < span.length; i++) {
span[i].onclick = theCode;
}
function theCode() {
var operators = ['+', '-', '/', '*'];
var btnVal = this.innerHTML;
var srnVal = screen.innerHTML;
var opers = {
'*': function(num) {
return (num[0] * num[1])
},
'+': function(num) {
return (num[0] + num[1])
},
'-': function(num) {
return (num[0] - num[1])
},
'/': function(num) {
return (num[0] / num[1])
}
}
var detectOp = function(value) {
for (var i = 0; i < operators.length; i++) {
if (operators[i] == value) {
return true;
}
}
return false;
};
function iteration(num) {
num = num + '';
for (var i = num.indexOf - 1; i > srnVal.length; i--) {
num = srnVal[i] + num;
return num;
}
for (var j = num.indexOf + 1; j < srnVal.length; j++) {
num = num + srnVal[j];
return num;
}
return parseInt(num);
}
if (btnVal == '=') {
for (var i = 0; i < srnVal.length; i++) {
if (detectOp(srnVal[i])) {
screen.innerHTML = opers[srnVal[i]](iteration);
}
}
} else {
srnVal += btnVal;
screen.innerHTML += btnVal;
}
}
})();
};
/* Basic reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
/* Better text styling */
font: bold 14px Arial, sans-serif;
}
/* Finally adding some IE9 fallbacks for gradients to finish things up */
/* A nice BG gradient */
html {
height: 100%;
background: white;
background: radial-gradient(circle, #fff 20%, #ccc);
background-size: cover;
}
/* Using box shadows to create 3D effects */
#calculator {
width: 325px;
height: auto;
margin: 100px auto;
padding: 20px 20px 9px;
background: #9dd2ea;
background: linear-gradient(#9dd2ea, #8bceec);
border-radius: 3px;
box-shadow: 0px 4px #009de4, 0px 10px 15px rgba(0, 0, 0, 0.2);
}
/* Top portion */
.top span.clear {
float: left;
}
/* Inset shadow on the screen to create indent */
.top #screen {
height: 40px;
width: 212px;
float: right;
padding: 0 10px;
background: rgba(0, 0, 0, 0.2);
border-radius: 3px;
box-shadow: inset 0px 4px rgba(0, 0, 0, 0.2);
/* Typography */
font-size: 17px;
line-height: 40px;
color: white;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
text-align: right;
letter-spacing: 1px;
}
/* Clear floats */
.keys,
.top {
overflow: hidden;
}
/* Applying same to the keys */
.keys span,
.top span.clear {
float: left;
position: relative;
top: 0;
cursor: pointer;
width: 66px;
height: 36px;
background: white;
border-radius: 3px;
box-shadow: 0px 4px rgba(0, 0, 0, 0.2);
margin: 0 7px 11px 0;
color: #888;
line-height: 36px;
text-align: center;
/* prevent selection of text inside keys */
user-select: none;
/* Smoothing out hover and active states using css3 transitions */
transition: all 0.2s ease;
}
/* Remove right margins from operator keys */
/* style different type of keys (operators/evaluate/clear) differently */
.keys span.operator {
background: #FFF0F5;
margin-right: 0;
}
.keys span.eval {
background: #f1ff92;
box-shadow: 0px 4px #9da853;
color: #888e5f;
}
.top span.clear {
background: #ff9fa8;
box-shadow: 0px 4px #ff7c87;
color: white;
}
/* Some hover effects */
.keys span:hover {
background: #9c89f6;
box-shadow: 0px 4px #6b54d3;
color: white;
}
.keys span.eval:hover {
background: #abb850;
box-shadow: 0px 4px #717a33;
color: #ffffff;
}
.top span.clear:hover {
background: #f68991;
box-shadow: 0px 4px #d3545d;
color: white;
}
/* Simulating "pressed" effect on active state of the keys by removing the box-shadow and moving the keys down a bit */
.keys span:active {
box-shadow: 0px 0px #6b54d3;
top: 4px;
}
.keys span.eval:active {
box-shadow: 0px 0px #717a33;
top: 4px;
}
.top span.clear:active {
top: 4px;
box-shadow: 0px 0px #d3545d;
}
<DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="calculator">
<!-- Screen and clear key -->
<div class="top">
<span class="clear">C</span>
<div id="screen"></div>
</div>
<div class="keys">
<!-- operators and other keys -->
<span value="7">7</span>
<span value="8">8</span>
<span value="9">9</span>
<span class="operator" value="+">+</span>
<span value="4">4</span>
<span value="5">5</span>
<span value="6">6</span>
<span class="operator" value="-">-</span>
<span value="1">1</span>
<span value="2">2</span>
<span value="3">3</span>
<span class="operator" value="/">/</span>
<span value="0">0</span>
<span>.</span>
<span class="eval" value="=">=</span>
<span class="operator" value="*">*</span>
</div>
</div>
</body>
【问题讨论】:
-
呃,代码在哪里?如果您不提供代码,我们将无法帮助您。
-
请提供您的代码?
-
设置断点或在脚本中使用
debugger命令,这样您就可以单步执行每一行,并查看每一步的所有变量值。将是宝贵的学习经验 -
以前做过,不明白为什么代码没有执行。我认为问题在于,代码读取的是操作数,而不是数组中的数字。所以我想有人可以帮我解决这个问题。
标签: javascript html calculator