Проблема возникает из-за того, что возвращаемое значение document.getElementsByTagName
является живой NodeList:
var l = document.getElementsByTagName('div');
console.log(l[0]); // undefined
var d = document.createElement('div');
document.body.appendChild(d);
console.log(l[0]); // div
Объедините это с тем, что вы называете код до того, как документ будет готов (так до появления элементов в список) и известную ошибку в коде консоли, которая может отображать объекты в состоянии после вызова console.log
, и у вас есть точное поведение, которое вы испытываете.
Повторим:
var lista_input = document.getElementsByTagName("input");
// lista_input is a live NodeList with 0 elements
console.log(lista_input); // will print the lista_input object at a later point
console.log(lista_input[0]); // will print undefined at a later point
/* time passes, dom is loaded */
// lista_input now has the inputs you expect it to have
/* time passes */
// logs are now shown in Console
EDIT: Для того, чтобы получить хороший журнал, вы можете stringify объект при входе его, превращая его в примитивное значение, которое получает вошедшего правильно:
var lista_input = document.getElementsByTagName("input");
console.log(JSON.stringify(lista_input)); // {"length":0} - empty list
console.log(JSON.stringify(lista_input[0])); // undefined
PS : Ссылка на сообщение в блоге с объяснением ошибки в консоли: http://techblog.appnexus.com/2011/webkit-chrome-safari-console-log-bug/
Ссылка на вопрос с запросом исправление ошибки консоли: How can I change the default behavior of console.log? (*Error console in safari, no add-on*)
, который должен отлично работать так, как вы ожидаете, вы уверены, что ничего не происходит с 'lista_inputs' между двумя вызовами журнала? – geevee
Это должно работать ... попробуйте на этом сайте: 'document.getElementsByTagName (" input ") [0]' – megawac
Ваш код в порядке. проверьте этот http://jsfiddle.net/kbJpj/19/ –