0

我的简单 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() 时,我被告知值是“数字”类型,但下一行也是一个 console.log('mins_running'),例如,它明确指出值为“NaN”。我的价值是不是一个数字?这是怎么回事?愚蠢的javascript——再正常一点,该死的!

任何合理的输入/帮助将不胜感激。

感谢所有的帮助,伙计们。看起来我又开始使用旧的 Form.elementName.value 了。(如果这是一个非常糟糕的主意或者根本不适合生产代码,请随意说些什么。)

4

3 回答 3

6
document.getElementsByName("mins_running")

返回 a 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);
}

实时复制| 资源

于 2012-12-23T22:59:46.210 回答
1

Waleed 分享了如何解决它

你到达那里的技术原因NaN是......

您获取对 a 的引用NodeListdocument.getElementsByName("distance")并尝试访问其value上的属性。该属性不存在于NodeList或原型链上的任何位置。在 JavaScript 中,这意味着undefined返回。

当您调用parseInt()withundefined作为第一个参数时,该函数将toString()它并返回"undefined"。您明确将基数设置为10,这显然只涵盖数字09并且无法解析数字。发生这种情况时,parseInt()返回NaN. 由于NaNis 的Number类型(它是 IEEE-754 规范的一部分),typeof操作员会告诉您它是"Number".

如果您将基数设置为31,它将能够解析"undefined",它会是26231474015353:)

于 2012-12-23T23:08:51.590 回答
-1

为您的标签设置 ID 并改用 getElementById。

于 2012-12-23T23:33:20.393 回答