|
|
|
| Привет всем! :)
Тут http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=7173 смотрел - не то..
Проблема в следующем - есть форма, далее по сабмиту поля проверяются на заполнение и если что-то пропущено, выводится алерт. Все классически стандартно.
Но суть в том, что значение name элемента не совсем "красивое" - это чисто техническая абреввиатура. Красивое видимое пользователю значение прописано в <label>
И вот как бы, зная id элемента, прочитать привязанное к нему значение <label>??
Чтобы было понятнее - вот кусок кода:
<p>
<label FOR="FName">First Name:</label>
<input TYPE="TEXT" NAME="FName" SIZE="20" MAXLENGTH="50">
</p>
<p>
<label FOR="LName">Last Name (Family):</label>
<input TYPE="TEXT" NAME="LName" SIZE="20" MAXLENGTH="50">
</p>
|
Вместо тех значений, которые во фрагменте выделены курсивом, я хочу выводить те, которые выделены болдом.
Сразу уточняю - форма формируется динамически + мультиязычная, поэтому вариант передачи сообщения как параметр и т.п. тут ну очень нежелателен... | |
|
|
|
|
|
|
|
для: LouD
(27.08.2007 в 17:35)
| | в динамическое построение внести изменение | |
|
|
|
|
|
|
|
для: bronenos
(27.08.2007 в 18:22)
| | а не трогая сервер, чисто JS-ом? Неужели никак?? | |
|
|
|
|
|
|
|
для: LouD
(27.08.2007 в 17:35)
| | Для MSIE проблема решается относительно просто - там для любого тега можно прочитать свойство sourseIndex, которое вернёт порядковый номер элемента в коллекции all. Получаете номер N элемента формы и начинаете перебор номеров c N-1 в порядке убывания до первого тега с tagName == 'label', находя который, читаете его innerText (или innerHTML).
Разумеется - это в первом приближении: ибо какие-то элементы формы могут быть скрытыми для юзера (display, hidden, нулевые размеры, позиционирование с использованием слоёв z-Index...), а какие-то просто не будут иметь метки-лейбла... т.е. аналитику надо включать.
В общем случае (для всех браузеров, включая MSIE) придётся "гулять" в пределах формы, пытаясь сопоставить конкретный лейбл (из всех найденных) конкретному элементу формы (из всех найденных).
UPDATE: немного помедитировав, я понял, что мой совет несерьёзен.
У каждого лейбла есть свойство FOR, которое читается всеми браузерами.
У каждого элемента формы есть NAME, которое читается всеми браузерами.
Отсюда - всё элементарно:
1. находим все элементы конкретной формы (запоминаем форму как объект obj_form) через коллекцию obj_form.elements
2. прогоняем эту коллекцию в цикле и запоминаем имена NAME элементов в массиве ARR
3. находим все элементы-лейблы во всем документе через метод getElementsByTagName ('label')
4. прогоняем эти лейблы через цикл и проверяем каждый лейбл на принадлежность этой форме - через паренты вплоть до <body> и если встретится тег <form>, проверяем его на тождественность obj_form: если не он, то идем дальше. Если тождественнен, то читаем атрибут FOR и сравниваем его значение с элементами массива ARR и находим соответствующий элемент, который и запоминаем в результирующем массиве RES в виде: "NAME элемента = innerHTML соответствующего лейбла". | |
|
|
|