Javascript кръстосано инсталиране на манипулатори на събития

Браузърите, които поддържат DOM2 модела на събитията (когато събитието първо се спусне от върха на DOM дървото до целевия елемент и след това се връща отново нагоре), използват методаaddEventListener с три аргумента:

Фаза на улавяне е булева стойност: ако е вярно - тогава манипулаторът ще работи във фазата на "улавяне", т.е. когато събитието се спуска, ако е невярно - тогава във фазата на "бълбукане". Понякога това е полезно.

Браузъри, които не поддържат DOM2 събитие модел (IE):

Както се вижда от параметрите на методитеattachEvent иdetachEvent, те приемат само два аргумента - всичко е правилно, не може да се говори за никаква фаза на "захващане" в модела на събитията на IE, защото в него просто няма фаза за "захващане", събитията се генерират веднага в "целевия" обект и изплуват до върха на DOM дървото.

Въобще защо ми е всичко това. Нека напишем универсална функция, която ще ни позволи да не мислим за проблеми със съвместимостта на браузъра. Функцията, описана по-долу, връща обект, който има три метода за настройка и премахване на събитие, както и метод за изкуствено генериране на събитие.

Предимството на този подход е, че кодът, който проверява наличието на определена функция в браузъра, ще бъде изпълнен само веднъж – когато обектът е създаден, което ни спестява поне малка част, но все пак ценни ресурси. Освен това в глобалния обхват имаме само една променлива - тази, към която ще присвоим нашия обект.