Я обнаружил, что данная форма на HTML-странице выглядит так:
<form name = "form">
<input type = "image" name = "foo"
src = "somewhere.gif" alt = "image" value = "blah"/>
<input type = "text" name = "bar" value = "blah"/>
</form>
При доступе к элементам через DOM в Javascript есть элемент нет для ввода изображения! Это просто опущено. Итак, document.forms[0].elements.length - это 1, а document.forms[0].element[0].type - это «текст».
Это похоже на Firefox и IE. Я не могу найти документального подтверждения этого факта в моих справочниках или в Интернете. Все, что я могу найти, это простой комментарий здесь:
https://bugzilla.mozilla.org/show_bug.cgi?id=163822#c4
Что предполагает, что это «просто так». Если так, то пусть будет так - но разве это В самом деле нигде не задокументировано? Это историческая ошибка или есть причина?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, что это поведение свойства elements во всех браузерах.
Однако вы все равно сможете получить к нему доступ через DOM в JavaScript, используя свойство childNodes.
Для вашего примера:
document.forms[0].childNodes.length; // equals 5 (2 inputs and 3 text nodes).
document.forms[0].childNodes[1]; // This is your input with type='image'
Интересно ... спецификация ДОМ 1 определяет .elements как:
elements Returns a collection of all control elements in the form.
В спецификации HTML 4, часть 17.2.1, не перечислены типы "изображений", так что я думаю, что это ответ.
Спецификация HTML, которую вы связываете с типами изображений списка делает (между отправкой и сбросом), если я не понимаю, что вы сказали.
Действительно, я вижу комментарий: «Предполагается, что DOM работает таким образом, именно так он работает в Mozilla, NS4x и IE. Мы не можем изменить это, даже если бы захотели, многие сайты сломались бы.», поэтому я склоняюсь к исторической ошибке. Элемент изображения уже находится в HTML 2 DTD ...
Возможно, это из-за этого и других возможных виновников, которых авторы не рекомендуют использовать подобную иерархию Dom в пользу функций getElement [s] ByXxx (или XPath!).
Меня это укусило. Это указано в документах MSDN DHTML.
Верно, но тогда он не перечисляет "входы"
textareaилиselect, и они делать появляются в свойстве.element