Автор Тема: обработчик событий для всех объектов input type=text  (Прочитано 2702 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Всем привет!

Ранее я умел вызывать обработчики событий прямо из тэга, а сейчас понадобилось вызывать одинаковые обработчики onfocus и onblur для всех элементов input type=text текущего документа. Каждому в тэг пихать названия функций не хочется, пытаюсь "зарегистрировать" обработчики для этих событий как-то по-хитрому. Пока не получается.
Рассмотрим упрощённый вариант:





Предположим, что по onfocus в текстовое поле должно записываться имя этого текстового поля, а по onblur оно должно стираться (т.е. одинаковы не обработчики разных событий, а обработчики одного события для всех элементов).

Оффлайн virka

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 68
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
обработчик событий для всех объектов input type=text
« Ответ #1 : 09 Декабря 2004, 15:22:33 »
Способов я знаю несколько, все под IE.
Достаточно простой способ есть под IE5+.
Допустим, у Вас в документе такая форма:







В ставите указатель, связывающий нужную Вам функцию с событием onbeforeeditfocus в документе. Это событие появляется только в IE5, насколько я знаю. Других событий с фокусом в документе в целом я не знаю.

До этого определяете функцию для фокуса
function textOnOff()
{
var srcEl=event.srcElement;
srcEl.value=srcEl.name;
}
Для блюра событий в документе я не знаю, поэтому в той же функции перед рисованием текста очищаем все, что нужно (в форме):
function textOnOff()
{
var srcEl=event.srcElement;
var curForm=srcEl.form;
for(na=0;na   {
   curForm.elements[na].value="";
   }
srcEl.value=srcEl.name;
}
Для IE4 все то же самое, только заменяем событие onbeforeeditfocus на события, которые он понимает - onclick, и делаете проверку на то, что текущий элемент - элемент формы. Чтобы учесть табуляцию включаете событие onkeydown и event.keyCode (для клавиши Tab он равен 9). Обратите внимание, что при связывании с функцией событие пишится в нижнем регистре, а имя функции без ().

Еще один способ - связывание функции с элементом в форме, благо там события onfocus и onblur есть. Только делать это нужно уже после того, как формы со всеми элементами заданны.
Определяем две функции
function textOn()
{
this.value=this.name;
}
function textOff()
{
this.value="";
}
В документе после Ваших форм (если их много)
размещается блок

Интересно, что в этом случае this в функции относится к текущему элементу в форме. Почему?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28