我创建了一个JavaScript计算器。这是它的图像
但是正面临方括号()的问题。和点(。)
我想要的是,当我首先单击括号按钮时,它会给我一个开括号,然后如果再次单击,它应该给一个右括号,依此类推,就像在普通计算器中一样,我希望程序知道如何处理带括号。
<input type="text" id="t1" class="tt">
<input type="button" onClick="myFun6()" value="()">
<input type="button" onClick="myFun7()" value=".">
<script>
function myFun6()
{
var prac = "()";
document.getElementById("t1").value+=prac;
}
</script>
我的第二个问题是关于句点的。我本来想去上班,但仍然有问题。如果没有元素,则单击点按钮将显示为“ 0”。但是,如果我再次单击,结果将为“ 0.0”。等等。
function myFun7()
{
var d=document.getElementById("t1").value;
if(d.length - 1)
{
d="0.";
document.getElementById("t1").value+=d;
}
else
{
d=".";
document.getElementById("t1").value+=d;
}
}
如果您想为“()”设置一个按钮:一个简单的解决方案是创建一个开关,该开关将交替显示是否需要打开或关闭。
let bracketSwitch = false;
function myFun6(){
var prac;
if(!bracketSwitch){
prac = "("
} else {
prac = ")"
};
bracketSwitch = !bracketSwitch;
document.getElementById("t1").value+=prac;
}
如上所述,您也可以将交换机存储在本地或会话存储中。尽管此解决方案可能不是您真正想要的。正如@deceze所提到的,这将不允许嵌套括号...
您将必须包含一些较重的逻辑以允许嵌套括号。这是我想到的。这可能并不能完全解决所有的问题,当然还有其他(更好)的方法...但这至少可以使您入门:
let bracketSwitch = false;
function myFun6_2(){
var input = document.getElementById("t1").value;
if(input.length >= 1){ //already something in the input box
var index = input.charAt(input.length-1);
if(!isNaN(parseInt(index)) && bracketSwitch){ //index is a number
document.getElementById("t1").value += ')';
bracketSwitch = !bracketSwitch;
} else if((!isNaN(parseInt(index)) && !bracketSwitch) || index === "."){
document.getElementById("t1").value += 'x(';
bracketSwitch = !bracketSwitch;
}else {
document.getElementById("t1").value += '(';
if(!bracketSwitch){ //if the switch was off
bracketSwitch = !bracketSwitch;
};
}
} else { //empty input box
document.getElementById("t1").value += '(';
bracketSwitch = !bracketSwitch;
}
};
此else块的注释:
else if((!isNaN(parseInt(index)) && !bracketSwitch) || index === "."){
document.getElementById("t1").value += 'x(';
bracketSwitch = !bracketSwitch;
在我手机上的计算器上,如果我有“ 5”并打括号,则会加上“ X(”。得出的最终结果是“ 5x(”。或者如果我有“ 5”。它将得到“ 5.x( ”。您可能不想对自己做同样的事情。我也可以辩称,在这种情况下不应添加任何括号。
关于点问题:如以上注释中所述,您的代码将用“ 0”替换输入的任何单个值。这是一个解决方案,似乎可以满足您的要求。
function myFun7(){
var d=document.getElementById("t1").value;
var dot = d.includes('.');
if(d.length === 0){
document.getElementById("t1").value+= "0.";
} else if(!dot){ //this checks to make sure only one dot has been used
document.getElementById("t1").value+= ".";
}
}