Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > подавить onmouseout |
Автор: Serge2k 18.1.2007, 12:39 | ||
Всем привет. я конечно повторюсь, и ничего нового в своем вопросе не спрошу, но просто очень срочно нужно это дело решить. Так что заранее извиняюсь. Проблема вот в чем. Есть такой код
Так вот. Когда мышка заходит на внутренний div, это вызывает onmouseout внешнего div. А мне нужно, чтобы это событие происходило, только когда мышь выходит за границы общего div'а. Нарыл в инете решения этих проблем, но некоторые не подошли... а некоторые только для конкретных браузеров. Так что прошу Вашей помощи. Ну... естественно во внешнем теге, может быть сколь угодно много разных элементов... И все это дело должно работать нормально... Заранее спасибо. |
Автор: Sardar 18.1.2007, 15:18 |
Да, это очень не удобная фишка, придуманная ещё пьяными нетскейповцами и с тех пор ничего (ради совместимости) не менялось. Можешь обращаться к event.(srcElement|target) и проверять не является ли он дочерним элементом (итерируя до внешнего дива или пользуясь методом .contains). |
Автор: Zeroglif 18.1.2007, 15:19 |
Проверка на элемент (toElement и relatedTarget), к "которому пришли по событию" не подошла? |
Автор: Serge2k 18.1.2007, 15:22 | ||||
хм... если не затруднит малек поподробнее... Добавлено @ 15:23
видел, народ что то писал про contains. Но я так понял что он тока в IE реализован? И потом, если я правильно понимаю, мне в этом случае надо будет к каждому внутреннему элементу привязывать обработчик события... или нет? |
Автор: Zeroglif 18.1.2007, 15:50 | ||
http://developer.mozilla.org/en/docs/DOM:event.relatedTarget http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/toelement.asp У тебя на диве висит onmouseout, когда мышом двигаешь и срабатывает это событие, то всегда есть объект, на котором оно сработало/родилось, это srcElement или target. Иногда нужно узнать, "куда ты ушёл" после того, как событие сработало, это - toElement или relatedTarget. Соответственно, когда ты уходишь с внешнего дива на внутренний, то внешний - target, а внутренний - relatedTarget и наоборот, при выходе из внутреннего во внешний. Отсюда, нужна функция, которая будет перекрывать обработку события, если relatedTarget-ом будет внутренний, или внешний див. Что-нибудь вроде (очень приблизительно):
Но нужно учесть, что Опера наверняка заглючит... плюс, если ещё внутри блоки, то сложнее. ![]() |
Автор: Serge2k 18.1.2007, 15:57 |
Пасибки.... Буду пробовать... ![]() |
Автор: 12345c 18.1.2007, 16:21 |
Тут есть статья - как пограмотнее работать с событиями. Не избегать их, а обязательно обрабатывать парами - over и out. Тогда не будет проблем с отслеживанием ухода с дива. http://js2.ru/subs/subs018.shtml - "Контроль за перемещениями мыши." |