Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.10.2009, 15:18
Интересующийся
Отправить личное сообщение для Nominus umbra Посмотреть профиль Найти все сообщения от Nominus umbra
 
Регистрация: 29.10.2009
Сообщений: 19

Как в обработчике событий отсеивать собития, пришедшие по всплыванию от дочек?
Задача простая - вешаю событие на элемент, у которого есть дочки.
Например, на mousemove.
Но это событие по всплыванию будет приходить при перемещении мыши ВНУТРИ самого себя - при переходах между потомками.
Но мне это категорически не надо, мне надо чтобы событие, вне зависимости от того, сколько у него потомков, пришло только один раз.

Я использую синглтон Event с этого сайта для добавления событий.

Придумал такое: в обработчике проверять, являются ли event.target и
event.relatedTarget потомками моего родителя (или им самим), и если они оба ими являются - то игнорировать событие, иначе - реагировать.

Является ли такое решение корректным? Нет ли проще пути?
Ответить с цитированием
  #2 (permalink)  
Старый 30.10.2009, 15:20
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Просто проверять, является ли event.target нужным элементом.
Ответить с цитированием
  #3 (permalink)  
Старый 30.10.2009, 17:18
Интересующийся
Отправить личное сообщение для Nominus umbra Посмотреть профиль Найти все сообщения от Nominus umbra
 
Регистрация: 29.10.2009
Сообщений: 19

event.target не всегда будет нужным элементом
Вы можете переместить мышь так, что event.target - будет сразу потомком.
Ответить с цитированием
  #4 (permalink)  
Старый 30.10.2009, 17:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Nominus umbra
event.target не всегда будет нужным элементом
Так я и сказал, проверять, нужный ли он, и, в зависимости от этого, делать/не делать что-то.
Ответить с цитированием
  #5 (permalink)  
Старый 30.10.2009, 18:14
Интересующийся
Отправить личное сообщение для Nominus umbra Посмотреть профиль Найти все сообщения от Nominus umbra
 
Регистрация: 29.10.2009
Сообщений: 19

Да, но событие всё равно нужно инициировать...
Задачу уточню: есть див, в нём ещё куча элементов, на него навешено событие mousemove.
Оно должно сработать только ОДИН раз, и неважно, переместили мышь непосредственно на него или на его содержимое.
Если я буду анализировать event.target - то при перемещении мыша внутрь, и если он попадёт на потомка дива, событие просто не возникнет.
А ето неверно.
Мне нужно, чтобы независимо от содержимого дива, событие mousemove - обязательно было вызвано для родителя, и только один раз.
Ответить с цитированием
  #6 (permalink)  
Старый 30.10.2009, 20:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Nominus umbra
Мне нужно, чтобы независимо от содержимого дива, событие mousemove - обязательно было вызвано для родителя, и только один раз.
Это невозможно.
Ответить с цитированием
  #7 (permalink)  
Старый 30.10.2009, 23:22
Интересующийся
Отправить личное сообщение для Nominus umbra Посмотреть профиль Найти все сообщения от Nominus umbra
 
Регистрация: 29.10.2009
Сообщений: 19

Почему? Я сейчас сделал так вот:
// Проверка объекта на принадлежность родителю
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 изучаю, может, есть более элегантный и корректный способ? Или как я написал - есть какая-то засада?
Ответить с цитированием
  #8 (permalink)  
Старый 30.10.2009, 23:48
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

relatedTarget в IE нет
Ответить с цитированием
  #9 (permalink)  
Старый 30.10.2009, 23:53
Интересующийся
Отправить личное сообщение для Nominus umbra Посмотреть профиль Найти все сообщения от Nominus umbra
 
Регистрация: 29.10.2009
Сообщений: 19

Я в первом посте указал, что использую синглтон Event с этого сайта для добавления событий. В нём есть "патч" для IE, так что relatedTarget есть.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск