老师,看看我这个计算器可以怎么优化一下吗?
<!DOCTYPE html> <html> <head> <title>简易计算器</title> <link rel="stylesheet" type="text/css" href="index.css"> <script type="text/javascript" src="index.js"></script> </head> <body onload="init()"> <div class="div_out" id="div1"> <div class="div_in" id="div2"> <input type="text" name="text1" id="text1"/> </div> <div class="div_in" id="div3"> <input type="text" name="text2" id="text2"/> </div> <div class="div_in" id="div4"> <input type="button" name="button" value="C" id="C" /> <input type="button" name="button" value="( )" id="( )" /> <input type="button" name="button" value="⬅" id="⬅" /> <input type="button" name="button" value="/" id="÷" /> <input type="button" name="button" value="7" id="7" /> <input type="button" name="button" value="8" id="8" /> <input type="button" name="button" value="9" id="9" /> <input type="button" name="button" value="*" id="×" /> <input type="button" name="button" value="4" id="4" /> <input type="button" name="button" value="5" id="5" /> <input type="button" name="button" value="6" id="6" /> <input type="button" name="button" value="-" id="-" /> <input type="button" name="button" value="1" id="1" /> <input type="button" name="button" value="2" id="2" /> <input type="button" name="button" value="3" id="3" /> <input type="button" name="button" value="+" id="+" /> <input type="button" name="button" value="+/-" id="+/-" /> <input type="button" name="button" value="0" id="0" /> <input type="button" name="button" value="." id="." /> <input type="button" name="button" value="=" id="=" /> </div> </div> </body> </html>
*{
margin:0px;
padding:0px;
border:0px;
}
div{
left:0px;
right:0px;
margin:auto;
border:1px solid grey;
}
.div_out{
width:300px;
height:450px;
top:50px;
position:relative;
}
.div_in{
width:295px;
}
#div2{
height: 40px;
}
#div3{
height:40px;
}
input[type="text"]{
width: 295px;
text-align:right;
padding-right:10px;
box-sizing:border-box;
}
#text1{
line-height:39px;
font-size:25px;
color:#33CCFF;
}
#text2{
line-height:39px;
font-size:35px;
}
input[type="button"]{
width:60px;
height:60px;
margin:5px;
font-size:20px;
}
input[type="button"]:hover{
background-color:#33CCFF;
border:1px solid grey;
}//初始化
function init(){
var text1=document.getElementById("text1");
text1.value="";
var text2=document.getElementById("text2");
text2.value=0;
key_onclick();
var key_value;
}
//为每个按键添加点击事件,
function key_onclick(){
var buttons=document.getElementsByName("button");
for(var i=0;i<buttons.length;i++){
buttons[i].onclick=function(){
judge(this.value); //调用函数(该函数根据botton值进行判断如何处理)
}
}
}
var flag;//用于标记是否按下“=”符号,"false"="未按下","true"="已按下"
function judge(key_value){
if(flag==true){
text1.value=""; //“=”符号已按下,再次输入时将清空text1文本框以便显示接下来输入的值
flag=false;
}
if(!isNaN(key_value)){
text1.value=text1.value+key_value;
calculate(); //调用函数(该函数实现计算功能)
}else if(isNaN(key_value)){
switch(key_value){
case "+":
case "-":
case "*":
case "/":judgeLastIsMathematicalOperator(); //调用函数(该函数将对同时输入多个运算符的情况进行处理)
text1.value=text1.value+key_value;
break;
case ".":key_value=judgeLastIsNumber(); //调用函数(该函数将对小数点如何输入进行处理)
text1.value=text1.value+key_value;
break;
case "=":text1.value=text2.value;
text2.value="";
flag=true;
break;
case "C":text1.value="";
text2.value="0";
break;
case "⬅":deleteStr(); //调用函数(该函数将删除计算式最后一个字符)
calculate(); //调用函数(该函数实现计算功能)
break;
case "( )":alert("该功能正在完善中!");
break;
case "+/-":alert("该功能正在完善中!");
break;
}
}
}
//该函数将对同时输入多个运算符的情况进行处理
function judgeLastIsMathematicalOperator(){
var length=text1.value.length;
var lastStr=text1.value.substr(-1,);
if(lastStr=="+"||lastStr=="-"||lastStr=="*"||lastStr=="/"){
text1.value=text1.value.substr(0,length-1);
}
}
//该函数将对小数点如何输入进行处理
function judgeLastIsNumber(){
var length=text1.value.length; //text1的value值长度
var lastStr=text1.value.substr(-1,); //获取text1的value值最后一个字符
if(lastStr==""){
return "0." //如果lastStr为空(最后一个字符为空,即此前无输入),则返回“0.”
}else{
if(isNaN(lastStr)){
return "0." //如果lastStr不为空,且最后一个字符不为数字,返回0.
}else{
var index=text1.value.lastIndexOf("."); //获取最后一个"."的索引值,若未找到则返回“-1”
if(index!=-1){
var pointToLast=text1.value.substr(index+1,); //获取"."到最后一个字符的字符串
if(!isNaN(pointToLast)){
return "";
}
}else{
return ".";
}
}
}
}
//该函数将删除计算式最后一个字符
function deleteStr(){
var length=text1.value.length; //text1的value值长度
text1.value=text1.value.substr(0,length-1);
}
//该函数实现计算功能
function calculate(){
if (text1.value!="") {
var lastStr=text1.value.substr(-1,);
if(!isNaN(lastStr)){
text2.value=eval(text1.value);
}else{
text2.value="";
}
}else text2.value="0";
}上午干到下午,终于完成到现在这个样子。。。但是这个括号以及正负号的功能没有做 ,感觉这两个有点麻烦,希望老师也能说一下这两个功能实现的方法。。。。
16
收起
正在回答
2回答
同学你好,同学可以参考如下思路:
1、()括号实现如下:
a. 在js文件中定义一个全局变量并赋值为true,如var flag=true;
b. 当点击()按钮时,先判断flag的值,如果flag为true,显示出(左括号,如果flag为false,显示出右括号)。例如(2+10)-(3+2)
同学也可以修改html代码,将(左括号和)右括号分别作为一个按钮,这样用户就可以自己选择了。
2、+/-按钮是取当前结果的相反数,实现如下:
a. 当点击+/-时,在第一行表达式最前面和最后面加上左括号和右括号,并在前面添加-负号,例如:-(5+3)。
b. 将表达式的结果显示在第二行中。

相似问题
登录后可查看更多问答,登录/注册
java工程师2020版
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程




恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星