Заголовок сообщения: Обработчики события 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); } }
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.