Обработчики события onload у body @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 3 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Paul Yanchenko Муж.
новый человек
1
Сообщения: 112
Зарегистрирован: 05.02.04
Откуда: Екатеринбург
Заголовок сообщения: Обработчики события onload у body
Сообщение Добавлено: 31 Январь 2007, 18:38:14 
Обнаружил интересный нюанс в DOM Events и решил поделиться им с общественностью.

Мы привыкли, что элемент <body> может обрабатывать события типа "onload", "unload" и т.п. Однако, задавать обработчики через соответствующие атрибуты HTML-тэгов -- архаизм, прописывать их напрямую через element.onEventName = function () { … } -- не кошерно (хотя бы потому, что каждый такой обработчик перезаписывает установленный ранее). Кошерным считается использование методов addEventListener в W3C-совместимых браузерах и AttachEvent в IE.

Однако, если вы попробуете повесить этим кошерным методом обработчик события onload на <body>, то вы будете обнаружите, что он не работает. Причем, ни в Firefox, ни в IE. Лишь только Opera опять, как всегда, [s]выеб[/s]… выпендрилась и обрабатывает события как ни в чем не бывало.

Перечитав документацию, включив смекалку и подумав некоторое время, приходим к мысли: "А с какого [s]ху[/s]… перепоя событие типа onload должно обрабатываться элементом <body>? Ведь он есть лишь часть страницы, которая загружается, следовательно обработчик должен быть где-то выше -- у контейнера страницы. Ближе всего по логике вещей -- это window. Пробуем... Действительно работает!

А Opera дура, обрабатывает onload у всего: у window, у document (!), у document.body...

Тестовый исходник:

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>HTML body event listening via addEventListener in Firefox</title>
 </head>
  <body>
      <script type="text/javascript">
         function myEventHandler ()
         {
            alert('Event is happened');
         }

         function observe(element, eventName, handler)
         {
            if (element.addEventListener) {
              element.addEventListener(eventName, handler, false);
            } else if (element.attachEvent) {
              element.attachEvent('on' + eventName, handler);
            }
         }
         
         observe(window, 'load', myEventHandler);
      </script>
  </body>
</html>
abraitcev
новый человек
6
Сообщения: 165
Зарегистрирован: 28.09.02
Откуда: Murmansk
Сообщение Добавлено: 1 Февраль 2007, 10:36:53 
Paul Yanchenko, Шутка, повторенная дважды - глупость. А трижды … ?
Paul Yanchenko Муж.
новый человек
1
Сообщения: 112
Зарегистрирован: 05.02.04
Откуда: Екатеринбург
Сообщение Добавлено: 1 Февраль 2007, 12:20:26 
Где ты здесь узрел шутку? Тем более повторенную.
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 3 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100