11 августа 2011 г.

Кроссбраузерные обработчики событий

addEvent() от Дина Эдвардса

Проверенное мной лаконичное решение. Использует DOM Level 0 Events и никакого feature detection'а. Когда мы вешаем обработчик с помощью addEvent() на элемент, в качестве свойства этого элемента добавляется объект events, внутри которого в массив добавляется функция-обработчик. Если этот массив уже существует, то к уже имеющимся обработчикам добавляются новые.

Из коробки при использовании функции removeEvent() необходимо указывать в качестве третьего аргумента ссылку на ранее установленный обработчик. Т.е. нет возможности удалять анонимные функции-обработчики. Но это легко исправляется слегка изменив функцию removeEvent():

function removeEvent(element, type, handler) { // delete the event handler from the hash table if (element.events && element.events[type]) { (!handler) ? delete element.events[type] : delete element.events[type][handler.$$guid]; } };

Теперь если мы не указали ссылку на функцию-обработчик в качестве третьего аргумента, то удаляются все обработчики заданного события.

Ссылки по теме

Комментариев нет:

Отправить комментарий