Javascript getElementByID循环返回null

Javascript getElementByID循环返回null,javascript,Javascript,Chrome developer tools表示value函数不适用于空值,并指向for循环中的行。为什么getElementByID不能获取我的值?(这是一个重构,getElement使用输入的实际值完美地工作) 不要在数组中使用 使用一个简单的for循环 var a = ["start", "end"]; for(var i = 0; i < a.length; ++i) { console.log(document.getElementById(a[i]).value); } 因

Chrome developer tools表示value函数不适用于空值,并指向for循环中的行。为什么getElementByID不能获取我的值?(这是一个重构,getElement使用输入的实际值完美地工作)


不要在数组中使用

使用一个简单的for循环

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

因为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);
}
var locationStops=[“开始”,“结束”];
var stopNum=locationStops.length;
var stopAddresses=[];
对于(i=0;i
或者,您可以使用
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];

通过使用
map
,您可以避免for循环和可能遇到的bug:

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循环。

console.log(val)---总是检查变量是否保持您期望的值是有意义的。而且,DOM id应该是唯一的。不确定为什么需要循环。不要在
中为..使用
var locationStops=[“开始”,“结束”],stopNum=locationStops.length,stopAddresses=[];对于(val i=0;i
您的val引用0,1等。因此必须存在ID为0,1的元素。如果需要数组中的值,请使用locationStops[val]。调试程序。按照前面的注释中的建议添加一个
console.log
,或者在
stopAddresses上设置一个断点。按
行,检查
val
的值。我想你会很快发现问题的。
for (let val of locationStops) {
             ^^
  stopAddresses.push(document.getElementById(val).value);
}
[ for (id of locationStops) document.getElementById(id).value ]