WebVI.mevents
Решение WebVI.mevents устраняет проблемы правильной генерации событий от мыши и проблемы совместимости событийной модели разных браузеров:
Использование mevents с объектами иерархии DOM
Использование mevents с объектами иерархии DOM
Использование mevents с объектами иерархии Telement
Использование mevents с объектами иерархии Telement
Совместимость и разрешение проблем
Совместимость и разрешение проблем
Модуль mevents.js - основные структуры
Обработка событий мыши
WebVI.mevents предоставляет унифицированную систему обработки событий от мыши (mouseover, mouseout, mouseclick), реализованную в модуле webvi_mevents.js. Зачем потребовалось дополнять событийную модель браузера специальной надстройкой? Поводите мышь над объектами первого интерактивного примера.
Здесь хорошо видно, как браузер генерирует события mouseover и mouseout: событие генерируется всякий раз, когда мышь пересекает границу какого-либо объекта и событие генерируется сразу для всех объектов иерархии, лежащих выше данного. В общем случае можно сказать, что в стандартной модели возникают две проблемы: проблема событий-дубликатов и проблема порядка событий.
Передвиньте мышь с объекта england на объект france. Посмотрите, как браузер сгенерировал события: мышь не покидала объекты europe и earth, однако соответствующие события были сгенерированы. В этом и заключается проблема дубликатов. Устранение дубликатов, казалось бы, возможно реализовать, ведь у событийного объекта event есть средство приостановки передачи события по иерархии (и, следовательно, порождения лишних дубликатов события) свойство cancelBubble. Однако, во-первых, его использование подразумевает описание обработчиков у всех потомков элемента (что громоздко), во-вторых, доступ к событийному объекту реализован различным образом у разных браузеров и, в-третьих, порядок порождения событий всё-равно остаётся таким, каким он предусмотрен стандартом: от объекта, лежащего глубже в иерархии, ко всё более верхним объектам. Следующий рисунок иллюстрирует проблему порядка событий.

Здесь мышь переходит из точки 1 в точку 2. Даже если избавиться от дубликата событий earth.moseout и earth.mouseover, браузер генерирует события в таком порядке:
europe.mouseover
Однако, с точки зрения иерархического подхода, это неправильно: нельзя оказаться в Англии, не будучи, при этом, в Европе. События должны генерироваться так:
england.mouseover
Согласитесь, стандартная модель не слишком логична! Программисты визуальных сред гораздо привычнее к модели, показанной во втором интерактивном примере.
Здесь события генерируются корректно: в правильном порядке и без лишних дубликатов.
Свободное использование WebVI.mevents
Функциональностью mevents можно пользоваться без WebVI. Для это подключите к своей странице модуль webvi_mevents.js, представляющий собой извлечение из webvi.js.
Вы видите этот текст, потому что Ваш браузер не поддерживает таблицы стилей (CSS)