getElementByID循环返回null

时间:2015-10-28 04:34:11

标签: javascript

Chrome开发人员工具说,值函数对空值不起作用,并指向for循环中的行。为什么getElementByID没有获取我的值? (这是一个重构,getElement与输入的实际值完美配合)。

locationStops = ["start","end"];
var stopNum = locationStops.length;
var stopAddresses = [];
for(val in locationStops) {
stopAddresses.push(document.getElementById(val).value);
}

4 个答案:

答案 0 :(得分:1)

您可以使用map来避免for循环以及您遇到错误的可能性:

stopAddresses = locationStops . map(function(id) { 
  return document.getElementById(id).value;
});

根据您的风格偏好,您可能会发现以下内容更具可读性:

function get_value_from_id(id) {
  return document.getElementById(id).value; 
}

stopAddresses = locationStops . map(get_value_from_id);

如果要使用循环,可以使用新的for...of构造:

for (let val of locationStops) {
             ^^
  stopAddresses.push(document.getElementById(val).value);
}

如果您的环境支持ES7阵列理解:

[ for (id of locationStops) document.getElementById(id).value ]

如果您想坚持使用for...in循环,那么正如其他答案所指出的那样,循环变量是索引,而不是值,因此您必须使用locationStops[i]访问ID,但你最好使用常规for循环。

答案 1 :(得分:0)

不要将for in用于数组。

使用简单的for循环。

var a = ["start", "end"];
for(var i = 0; i < a.length; ++i)
{
 console.log(document.getElementById(a[i]).value);
}

您也可以使用for-in,但不推荐使用for-in,因为它有时会导致意外行为。

val是指0,1等。因此,必须有ID为0,1的元素。

for(var val in a)
{
 console.log(document.getElementById(a[val]).value);
}

答案 2 :(得分:0)

您的代码无效,因为您的for循环语法不正确

试试这个

var locationStops = ["start","end"];
var stopNum = locationStops.length;
var stopAddresses = [];
for(i = 0; i < locationStops.length; i++) {
stopAddresses.push(document.getElementById(locationStops[i]).value);
}

答案 3 :(得分:0)

或者,您可以使用Array.prototype.map

var locationStops = ["start","end"];
var stopAddresses = locationStops.map(function(val) {
  return document.getElementById(val).value;
});

老实说,循环遍历两个元素数组有点傻,如果是我的代码,我甚至更愿意直接分配每个地址。​​

var stopAddresses = [document.getElementById("start").value, document.getElementById("end").value];