我想创建一个简单地将2个字段相加的计算器。但无论我尝试什么它都行不通。它也会返回“NaN”,如果我使用parseInt()。
以下是代码:
<script type="text/javascript" language="Javascript">
function doSum()
{
var a = document.getElementsByName("a").value;
var b = document.getElementsByName("b").value;
var sum = a + b;
document.getElementById("sum").value = sum;
}
</script>
<form action="" method="POST">
<br/>a:<br/>
<input type="text" name="a" onblur='doSum()' value="0" size="5" />
<br/>b:<br/>
<input type="text" name="b" onblur='doSum()' value="0" size="5" />
<br/>Ergebnis<br/>
<input type="text" id='sum' value='' size="50" disabled/>
</form>
对不起那个noob问题,但是我做错了什么? 谢谢你的帮助!
答案 0 :(得分:15)
将id
提供给您的输入,并使用document.getElementById
唯一标识它们。然后,使用parseInt
获取其十进制int值,并将radix parameter设置为10,并显示当前的结果。
<script type="text/javascript" language="Javascript">
function doSum()
{
var a = parseInt(document.getElementById("a").value, 10);
var b = parseInt(document.getElementById("b").value, 10);
var sum = a + b;
document.getElementById("sum").value = sum;
}
</script>
<form action="" method="POST">
<br/>a:<br/>
<input type="text" id="a" onblur='doSum()' value="0" size="5" />
<br/>b:<br/>
<input type="text" id="b" onblur='doSum()' value="0" size="5" />
<br/>Ergebnis<br/>
<input type="text" id='sum' value='' size="50" disabled/>
</form>
getElementsByName
返回一个元素列表,你必须通过索引引用你想要的元素,即使列表只包含一个元素。
getElementById
通过其id返回唯一标识的元素。
答案 1 :(得分:2)
使用getElementById并为每个提供一个Id。 getElementsByName返回一个数组。顺便说一句..这不是一个糟糕的问题。这是一个常见错误 - 通过使用处理包装集合的jQuery以某种方式解决这个问题。
答案 2 :(得分:2)
JavaScript中的字段都是字符串,你需要 int ,同时.getElementsByName
返回一个数组,你可能需要第一个元素,所以:
var a = parseInt(document.getElementsByName("a")[0].value, 10);
var b = parseInt(document.getElementsByName("b")[0].value, 10);
答案 3 :(得分:2)
getElementsByName
返回多个元素,因此复数为Elements
。您需要获取找到的第一个元素的属性:
var a = document.getElementsByName('a')[0].value;
getElementsByName
返回一个NodeList:这是一组使用该名称找到的所有元素。它就像一个数组,你可以使用数字索引(如[0]
)来访问找到的元素,并且有一个length
属性;没有其他类似阵列的功能。
此外,value
属性将始终为字符串(如果已设置)。当值为数字时,+
运算符是加法运算符;如果它们是字符串,则它是连接运算符。 J {"1" + "2"
等于"12"
。您需要使用parseInt
将其转换为数字:
var a = document.getElementsByName('a')[0].value;
a = parseInt(a, 10); // parse as a number in base 10
答案 4 :(得分:2)
getElementsByTagName返回node list:
function doSum()
{
var a = document.getElementsByName("a")[0].value;
var b = document.getElementsByName("b")[0].value;
var sum = parseInt(a, 10) + parseInt(b, 10);
document.getElementById("sum").value = sum;
}
所以你需要为它编制索引。另外,为了不进行字符串连接,需要parseInt with radix 10。除非您打算在计算器中接受八进制值。
答案 5 :(得分:1)
getElementsByName返回一个数组,该数组为您提供的内容提供了错误的数据类型。
尝试:
function doSum()
{
var a = document.getElementById("a").value;
var b = document.getElementById("b").value;
var sum = a + b;
document.getElementById("sum").value = sum;
}
</script>
<form action="" method="POST">
<br/>a:<br/>
<input id="a" type="text" name="a" onblur='doSum()' value="0" size="5" />
<br/>b:<br/>
<input id="b" type="text" name="b" onblur='doSum()' value="0" size="5" />
<br/>Ergebnis<br/>
<input type="text" id='sum' value='' size="50" disabled/>
</form>
答案 6 :(得分:1)
好的,两个问题,你使用getElementsByName获取a和b的valurs,它返回一个值数组(因为可能有很多)。使用getElementsById并将ID放入HTML。
此外,值属性将是字符串,因此您需要在添加之前转换为数字。
答案 7 :(得分:0)
a和b是字符串,所以:
function doSum()
{
var a = parseInt(document.getElementsByName("a").value);
var b = parseInt(document.getElementsByName("b").value);
var sum = a + b;
document.getElementById("sum").value = sum;
}