JS的数学计算器脚本错误

时间:2018-07-12 11:04:04

标签: javascript html

我的脚本想念什么吗?

当我按下减号(-)按钮时一切正常,但是当我按下加号(+)按钮时计算器出错。它的节目1、11、21,〜一切都以1结尾。

这是我的代码:

function myFunctionDown() {
    var x = document.getElementById("myNumber").value;
    var y = 1;
    var a = (x-y)*1;
    document.getElementById("myNumber").stepUp(-1);
    document.getElementById("demo").innerHTML = a;
}
function myFunctionUp() {
    var x = document.getElementById("myNumber").value;
    var y = 1;
    var a = (x+y)*1;
    document.getElementById("myNumber").stepUp(1);
    document.getElementById("demo").innerHTML = a;
}
<button onclick="myFunctionDown()">-</button>
<input type="number" id="myNumber" value="0">
<button onclick="myFunctionUp()">+</button>
<br/><br/>
$ <span id="demo">0</span>

我从w3school获得了这段代码,并以非常基础的知识对其进行了编辑。我有什么想念的吗?还是您有更好的方法来编写它?

5 个答案:

答案 0 :(得分:3)

尝试一下:-

使用parseInt()函数将字符串值转换为数字类型。

function myFunctionDown() {
    var x = parseInt(document.getElementById("myNumber").value);
    var y = 1;
    var a = (x-y)*1;
    document.getElementById("myNumber").stepUp(-1);
    document.getElementById("demo").innerHTML = a;
}
function myFunctionUp() {
    var x = parseInt(document.getElementById("myNumber").value);
    var y = 1;
    var a = (x+y)*1;
    document.getElementById("myNumber").stepUp(1);
    document.getElementById("demo").innerHTML = a;
}
<button onclick="myFunctionDown()">-</button>
<input type="number" id="myNumber" value="0">
<button onclick="myFunctionUp()">+</button>
<br/><br/>
$ <span id="demo">0</span>

答案 1 :(得分:3)

您需要使字符串为整数/数字(当前为字符串,因此它是串联值而不是相加)。您可以使用parseInt(document.getElementById("myNumber").value);

这将使值变成整数,例如将"1"变成1

function myFunctionDown() {
    var x = document.getElementById("myNumber").value;
    var y = 1;
    var a = (x-y)*1;
    document.getElementById("myNumber").stepUp(-1);
    document.getElementById("demo").innerHTML = a;
}
function myFunctionUp() {
    var x = parseInt(document.getElementById("myNumber").value);
    var y = 1;
    var a = (x+y)*1;
    document.getElementById("myNumber").stepUp(1);
    document.getElementById("demo").innerHTML = a;
}
<button onclick="myFunctionDown()">-</button>
<input type="number" id="myNumber" value="0">
<button onclick="myFunctionUp()">+</button>
<br/><br/>
$ <span id="demo">0</span>

答案 2 :(得分:3)

您需要将输入值解析为数字-因为所有输入值实际上都是字符串。

function myFunctionDown() {
    var x = parseInt(document.getElementById("myNumber").value);
    var y = 1;
    var a = (x-y)*1;
    document.getElementById("myNumber").stepUp(-1);
    document.getElementById("demo").innerHTML = a;
}
function myFunctionUp() {
    var x = parseInt(document.getElementById("myNumber").value);
    var y = 1;
    var a = (x+y)*1;
    document.getElementById("myNumber").stepUp(1);
    document.getElementById("demo").innerHTML = a;
}
<button onclick="myFunctionDown()">-</button>
<input type="number" id="myNumber" value="0">
<button onclick="myFunctionUp()">+</button>
<br/><br/>
$ <span id="demo">0</span>

答案 3 :(得分:2)

首先,您必须将输入值转换为Number,而无需将其乘以1。使用parseInt函数进行转换。

<button onclick="myFunctionDown()">-</button>
<input type="number" id="myNumber" value="0">
<button onclick="myFunctionUp()">+</button>
<br/><br/>
$ <span id="demo">0</span>
<script>
function myFunctionDown() {
    var x = parseInt(document.getElementById("myNumber").value);
    var y = 1;
    var a = x-y;
    document.getElementById("myNumber").stepUp(-1);
    document.getElementById("demo").innerHTML = a;
}
function myFunctionUp() {
    var x = parseInt(document.getElementById("myNumber").value);
    var y = 1;
    var a = x+y;
    document.getElementById("myNumber").stepUp(1);
    document.getElementById("demo").innerHTML = a;
}
</script>

答案 4 :(得分:1)

执行 <xsl:template match="Case"> <xsl:element name="NumberCase"> <xsl:element name="NumberCase"> <xsl:element name ="Id"> <xsl:value-of select="NumberCase/Id"/> </xsl:element> <xsl:element name ="Lastname"> <xsl:value-of select="Document/Lastname"/> </xsl:element> <xsl:element name ="ReferenceList"> <xsl:for-each select="Document/ReferenceList"> <xsl:value-of select="concat(.,'')"/> </xsl:for-each> </xsl:element> <xsl:element name="ClaimList"> <xsl:for-each select="Document/ClaimList"/> <xsl:value-of select="concat(.,'')"/> </xsl:for-each> </xsl:element> </xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet> 。问题解决了。

原因:

  • 通过定义+document.getElementById("myNumber").value返回x中的 String
  • JS强烈要求防止编译器错误。因此,在进行document.getElementById("myNumber").value时,即x+y。 JS默认情况下会自动将您的 Number 值转换为字符串,并将'+'解释为连接运算符。

您可以对JS使用相同的要求。何时,JS在字符串之前处理“ +”号,并且该字符串除了数字字符外什么也没有。它会转换为数字。

有关详细信息,请参见https://snack.expo.io/SJCGFC477Addition Operator

Number + String
function myFunctionDown() {
    var x = +document.getElementById("myNumber").value;
    var y = 1;
    var a = (x-y)*1;
    document.getElementById("myNumber").stepUp(-1);
    document.getElementById("demo").innerHTML = a;
}
function myFunctionUp() {
    var x = +document.getElementById("myNumber").value;
    var y = 1;
    var a = (x+y)*1;
    document.getElementById("myNumber").stepUp(1);
    document.getElementById("demo").innerHTML = a;
}