2015-10-28 2 views
-1

Инструменты разработчика Chrome говорят, что функция значения не работает с нулевым значением и указывает на строку в цикле for. Почему getElementByID не извлекает мои значения? (это рефактор, getElement работает отлично с введенными фактическими значениями).getElementByID loop return 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

log return 0 –

ответ

0

Не использовать for in для массивов.

Используйте вместо этого простой цикл.

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

Ваш код не работает, потому что ваш цикл синтаксис неверен

Try This

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

Вы могли бы избежать цикл, и потенциал для ошибок, которые вы запускали в с, используя 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 (id of locationStops) document.getElementById(id).value ] 

Если вы хотите придерживаться своего for...in цикла, то, как и другие ответы указали, переменная цикла является индексом, а не значение, поэтому вам нужно получить доступ к ID с locationStops[i], но вам лучше использовать обычный цикл.

Смежные вопросы