Проблема использования числовых индексов при работе с коллекциями объек_ тов документа состоит в том, что незначительные изменения, которые влекут за собой переупорядочивание элементов, могут привести к нарушениям в работе сценариев, опирающихся на исходный порядок следования элементов. Более на_ дежное решение заключается в том, чтобы присваивать имена важным элемен_ там документа и затем обращаться к ним по этим именам. В ранней версии DOM для этих целей можно было задействовать атрибут name форм, элементов форм, изображений, апплетов и ссылок.
Если атрибут присутствует, его значение используется в качестве имени соответ_ ствующего объекта. Например, предположим, что HTML_документ содержит следующую форму:
15.3. Ранняя упрощенная модель DOM: коллекции объектов документа
Допустим, что тег <form> является первым таким тегом в документе, тогда из JavaScript_сценария к получившемуся объекту Form можно обратиться любым из трех способов:
document.forms[0]
// По номеру формы
внутри документа
document.forms.f1
//
По
имени,
как
к
свойству
document.forms["f1"] //
По
имени,
как
к
элементу
массива
Фактически установка атрибута name в тегах <form>, <img> и <applet> (но не в теге <a>) позволяет обращаться к соответствующим объектам Form, Image и Applet (но не к объектам Link и Anchor), как к именованным свойствам объекта Document. То есть к форме можно обратиться так:
document.f1
Элементы внутри формы также могут иметь имена. Если был определен атрибут name в элементе формы, объект, который представляет этот элемент, становится доступным в качестве свойства соответствующего объекта Form. Предположим, что у нас имеется следующая форма:
<form name="shipping">
...
<input type="text" name="zipcode">
...
</form>
Тогда сослаться на элемент текстового поля ввода в этой форме можно с помо_ щью интуитивно понятного синтаксиса:
document.shipping.zipcode
В этом месте необходимо сделать последнее замечание об именовании элементов документа в ранней версии DOM. Что произойдет, если два элемента документа имеют в атрибуте name одно и то же значение? Если, например, теги <form> и <img> оба имеют имя «n», тогда свойство document.n превратится в массив, которое бу_ дет хранить ссылки на оба элемента.
Обычно вы должны стремиться к тому, чтобы подобная ситуация не повторилась у вас и обеспечить уникальность значений атрибутов name. Однако в одном случае такое положение вещей – вполне обычное дело. Согласно соглашениям для груп_ пировки переключателей и флажков на HTML_формах этим элементам необхо_ димо присваивать одинаковые имена. В результате имя становится свойством объекта Form, а значением этого свойства – массив ссылок на различные объекты переключателей или флажков. Подробнее об этом рассказывается в главе 18.