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];
}
};
Теперь если мы не указали ссылку на функцию-обработчик в качестве третьего аргумента, то удаляются все обработчики заданного события.
Ссылки по теме
- «Кросс-браузерное добавление и обработка событий» на javascript.ru. Статью не читал, но, думаю, Илья Кантор плохого не посоветует.
- «Cross-Browser Event Handling Using Plain ole JavaScript» от Юрия Зайцева.
Комментариев нет:
Отправить комментарий