Нормально ли пропускать входные данные изображения из DOM в document.forms [x] .elements?

Я обнаружил, что данная форма на 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

Что предполагает, что это «просто так». Если так, то пусть будет так - но разве это В самом деле нигде не задокументировано? Это историческая ошибка или есть причина?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
306
4

Ответы 4

Похоже, что это поведение свойства 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, не перечислены типы "изображений", так что я думаю, что это ответ.

Верно, но тогда он не перечисляет "входы" textarea или select, и они делать появляются в свойстве .element

Jonas Follesø 29.10.2008 17:43

Спецификация HTML, которую вы связываете с типами изображений списка делает (между отправкой и сбросом), если я не понимаю, что вы сказали.

PhiLho 29.10.2008 20:08

Действительно, я вижу комментарий: «Предполагается, что DOM работает таким образом, именно так он работает в Mozilla, NS4x и IE. Мы не можем изменить это, даже если бы захотели, многие сайты сломались бы.», поэтому я склоняюсь к исторической ошибке. Элемент изображения уже находится в HTML 2 DTD ...

Возможно, это из-за этого и других возможных виновников, которых авторы не рекомендуют использовать подобную иерархию Dom в пользу функций getElement [s] ByXxx (или XPath!).

Меня это укусило. Это указано в документах MSDN DHTML.

Другие вопросы по теме