Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Знаю id элемента, как прочитать его <label>?
 
 автор: LouD   (27.08.2007 в 17:35)   письмо автору
 
 

Привет всем! :)

Тут 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>

Вместо тех значений, которые во фрагменте выделены курсивом, я хочу выводить те, которые выделены болдом.

Сразу уточняю - форма формируется динамически + мультиязычная, поэтому вариант передачи сообщения как параметр и т.п. тут ну очень нежелателен...

   
 
 автор: bronenos   (27.08.2007 в 18:22)   письмо автору
 
   для: LouD   (27.08.2007 в 17:35)
 

в динамическое построение внести изменение

   
 
 автор: LouD   (27.08.2007 в 19:42)   письмо автору
 
   для: bronenos   (27.08.2007 в 18:22)
 

а не трогая сервер, чисто JS-ом? Неужели никак??

   
 
 автор: CNT   (27.08.2007 в 21:37)   письмо автору
 
   для: 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 соответствующего лейбла".

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования