2015-10-28 71 views
-1

Chrome开发人员工具说,该值函数不适用于空值并指向for循环中的行。为什么不是getElementByID获取我的值? (这是一个重构,getElement与输入的实际值完美匹配)。getElementByID循环返回null

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

'console.log(val);'---它是有道理的总是检查变量持有你期望的值。 – zerkms

+0

另外,DOM id应该是唯一的。不知道为什么你需要一个循环。 – Thilo

+0

日志返回0 –

回答

0

不要使用for in作为数组。

改为使用简单的for循环。

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

您可以使用程序还,但是,不建议,因为它会导致意外的行为的时候。

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

for(var val in a) 
{ 
console.log(document.getElementById(a[val]).value); 
} 
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); 
} 
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]; 
1

您可避免for循环,并为臭虫,你碰上了有潜力,通过使用map

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...in循环,那么其他的答案已经指出

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

,循环变量是索引,不值,所以你必须使用locationStops[i]来访问ID,但是最好使用常规for循环。