Как в обработчике событий отсеивать собития, пришедшие по всплыванию от дочек?
Задача простая - вешаю событие на элемент, у которого есть дочки.
Например, на mousemove. Но это событие по всплыванию будет приходить при перемещении мыши ВНУТРИ самого себя - при переходах между потомками. Но мне это категорически не надо, мне надо чтобы событие, вне зависимости от того, сколько у него потомков, пришло только один раз. Я использую синглтон Event с этого сайта для добавления событий. Придумал такое: в обработчике проверять, являются ли event.target и event.relatedTarget потомками моего родителя (или им самим), и если они оба ими являются - то игнорировать событие, иначе - реагировать. Является ли такое решение корректным? Нет ли проще пути? |
Просто проверять, является ли event.target нужным элементом.
|
event.target не всегда будет нужным элементом
Вы можете переместить мышь так, что event.target - будет сразу потомком. |
Цитата:
|
Да, но событие всё равно нужно инициировать...
Задачу уточню: есть див, в нём ещё куча элементов, на него навешено событие mousemove. Оно должно сработать только ОДИН раз, и неважно, переместили мышь непосредственно на него или на его содержимое. Если я буду анализировать event.target - то при перемещении мыша внутрь, и если он попадёт на потомка дива, событие просто не возникнет. А ето неверно. Мне нужно, чтобы независимо от содержимого дива, событие mousemove - обязательно было вызвано для родителя, и только один раз. |
Цитата:
|
Почему? Я сейчас сделал так вот:
// Проверка объекта на принадлежность родителю function isParented(obj, parent) { if(obj === parent) return true if(!obj) return false return isParented(obj.parentNode, parent) } function handleEvents(event) { // Если событие внутреннее, выходим if(isParented(event.target, this) == isParented(event.relatedTarget, this)) return ... Вроде работает. Я просто недавно JS изучаю, может, есть более элегантный и корректный способ? Или как я написал - есть какая-то засада? |
relatedTarget в IE нет
|
Я в первом посте указал, что использую синглтон Event с этого сайта для добавления событий. В нём есть "патч" для IE, так что relatedTarget есть.
|
Часовой пояс GMT +3, время: 11:52. |