Chrome开发人员工具说,值函数对空值不起作用,并指向for循环中的行。为什么getElementByID没有获取我的值? (这是一个重构,getElement与输入的实际值完美配合)。
locationStops = ["start","end"];
var stopNum = locationStops.length;
var stopAddresses = [];
for(val in locationStops) {
stopAddresses.push(document.getElementById(val).value);
}
答案 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];