Это нормально, если входные данные изображения не включены в DOM в document.forms [x] .elements? - PullRequest
3 голосов
/ 29 октября 2008

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

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

Ответы [ 4 ]

2 голосов
/ 29 октября 2008

Похоже, это поведение свойства 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'
0 голосов
/ 29 октября 2008

Был укушен этим сам. указано в документах MSDN DHTML .

0 голосов
/ 29 октября 2008

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

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

0 голосов
/ 29 октября 2008

Интересно ... DOM 1 спецификация определяет .elements как:

элементы Возвращает коллекцию всех элементов управления в форме.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...