Javascript document.getElementsByName()函数对我来说很奇怪

时间:2012-12-23 22:57:02

标签: javascript

我的简单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而不是。 (如果这是一个非常糟糕的想法或根本不适合生产代码,请随意说些什么。)

3 个答案:

答案 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);
}

Live Copy | Source

答案 1 :(得分:1)

Waleed shared how to fix it

您获得NaN的技术原因有......

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

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

如果您将基数设置为31,则可以解析"undefined",并且它将是26231474015353:)

答案 2 :(得分:-1)

为您的代码设置ID并改为使用getElementById。