我的简单javascript计算器中有以下变量:
var distance = parseInt(document.getElementsByName("distance"), 10);
var mins_running = parseInt(document.getElementsByName("mins_running").value, 10); // the running pace minutes
var secs_running = parseInt(document.getElementsByName("secs_running").value, 10); // the running pace seconds
var mins_walking = parseInt(document.getElementsByName("mins_walking").value, 10); // the walking pace minutes
var secs_walking = parseInt(document.getElementsByName("secs_walking").value, 10); // the walking pace seconds
问题是,当我尝试使用这些变量时(从表单输入文本但在计算器中用作数字)。当我在开发人员console.log中执行typeof()时,我被告知值的类型为“number”,但下一行也是一个console.log('mins_running'),例如,它明确指出值为“NaN”。我的价值是否是数字?这是怎么回事?愚蠢的javascript - 更正常,笨蛋!
任何合理的输入/帮助都将受到赞赏。
感谢所有的帮助,伙计们。看起来我回到使用旧的Form.elementName.value而不是。 (如果这是一个非常糟糕的想法或根本不适合生产代码,请随意说些什么。)
答案 0 :(得分:6)
document.getElementsByName("mins_running")
返回NodeList
,其中没有属性value
。使用
document.getElementsByName("mins_running")[0].value
代替。
示例:
HTML:
<input type="text" name="mins_running" value="10">
<br><button id="theButton">Click Me</button>
JavaScript的:
document.getElementById("theButton").onclick = function() {
// Note we're getting the first match ----------------vvv
var field = document.getElementsByName("mins_running")[0];
display("The field's current value is: " +
parseInt(field.value, 10));
// And using its value-^^^^^
};
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
答案 1 :(得分:1)
您获得NaN
的技术原因有......
您使用NodeList
获取对document.getElementsByName("distance")
的引用,并尝试访问该属性value
。该属性在NodeList
上或原型链上的任何位置都不存在。在JavaScript中,这意味着返回undefined
。
当您使用parseInt()
作为第一个参数调用undefined
时,该函数将toString()
并返回"undefined"
。您明确将基数设置为10
,这显然只涵盖数字0
到9
,并且无法解析数字。发生这种情况时,parseInt()
会返回NaN
。由于NaN
属于Number
类型(它是IEEE-754规范的一部分),typeof
运算符会告诉您它是"Number"
。
如果您将基数设置为31
,则可以解析"undefined"
,并且它将是26231474015353
:)
答案 2 :(得分:-1)
为您的代码设置ID并改为使用getElementById。