2016-02-05 2 views
-1

Я пытаюсь проверить все поля ввода, если рядом с ним есть тег изображения, который содержит определенное местоположение изображения в его src.JS: Невозможно прочитать свойство 'src' of Undefined

var productThumb = document.getElementsByTagName("img").src; 
var inputs = document.getElementsByTagName("input"); 
for (var i = 0, max = inputs.length; i < max; i++) { 
    imgSrc = productThumb[i]; 
    if (inputs[i].type === 'checkbox' && imgSrc.indexOf("/img/folder/1/") === 0) 
     inputs[i].checked = true; 
} 

Когда я запускаю этот код, я получаю ошибку в заголовке. Что не так? Я новичок в javascript, поэтому я понятия не имею, что я делаю неправильно, но я думаю, что это должно быть что-то с var = productThumb и imgSrc = productThumb[i]. Каков правильный способ объявления переменных?

+0

Вы должны поместить все ссылки на изображения в массив, если хотите иметь доступ к ним по позиции индекса. – Korgrue

+0

В вашем названии отсутствует имя свойства, которое он не может прочитать, что, вероятно, очень важно. Ухаживать за обновлениями? –

+1

Это практически дубликат [Что возвращает 'getElementsByClassName'?] (Http://stackoverflow.com/questions/10693845/what-does-getelementsbyclassname-return). – Xufox

ответ

1

getElementsByTagName возвращает массивную структуру (HTMLCollection). Таким образом, productThumb не определено, потому что нет src собственности в HTMLCollection.

Просто удалите .src из строки 1 в вашем примере и добавьте его в конец строки 4, и вам должно быть хорошо идти.

+0

Я пробовал это до публикации этого вопроса. Я получаю аналогичную ошибку: Uncaught TypeError: Не удается прочитать свойство 'src' undefined (...) –

+0

Я не могу реплицировать вашу точную проблему без дополнительного кода; насколько я могу судить, код работает правильно в соответствии с этим JSFiddle: https://jsfiddle.net/Hatchet/a64umcbr/ – Hatchet

+0

Я добавил код предупреждения и консольного журнала, чтобы узнать, действительно ли код совершает цикл через тег img, и он похоже, делает это. По какой-то причине он становится неопределенным после последнего img. Я сделаю еще несколько отладок. Спасибо хоть! –

1

Ваш код должен выглядеть так:

var productThumb = document.getElementsByTagName("img"); 
var inputs = document.getElementsByTagName("input"); 
for (var i = 0, max = inputs.length; i < max; i++) { 
    imgSrc = productThumb[i].src; 
    if (inputs[i].type === 'checkbox' && imgSrc.indexOf("/img/folder/1/") === 0) 
     inputs[i].checked = true; 
} 

Это потому, что в строке 1, getElementsByTagName возвращает массив элементов IMG. И, следовательно, получение src из массива элементов не имеет смысла.

+0

Я получаю ту же ошибку, когда я пытаюсь это сделать. –

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