Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   mouseover, mouseout - не распространяется на дочерние элементы (https://javascript.ru/forum/events/1912-mouseover-mouseout-ne-rasprostranyaetsya-na-dochernie-ehlementy.html)

barmaley 04.10.2008 07:35

mouseover, mouseout - не распространяется на дочерние элементы
 
Штука такая:
<div style="display:inline" id="myDiv">Some Text<span style="display:none"><select..></select></div>

Event.observe('myDiv', 'mouseover', this.onIn.bindAsEventListener(this));
Event.observe(this.container, 'mouseout', this.onOut.bindAsEventListener(this));

так вот в чём проблема - при наведении на текст(some text) отрабатывает mouseover - там я показываю внутренний скрытый span. Но когда я мышь увожу на этот select в спане - срабатывает mouseout!! В в3ц вроде пишет, что он mouseover, mouseout распространяется на все дочерние элементы. Собсна хотелось-бы понять, почему так и что происходит. Если событие вешается на все дочерние - то получается отрабатывает mouseout с textNode - some text что-ли?

ZoNT 04.10.2008 09:57

Во-первых ты не закрыл спан, во вторых ты пользуешся фремворком. w3c за фреймворки не отвечает...

barmaley 04.10.2008 10:15

ну спан - это я тут накидал. ща разобрался - и over & out всплывают на всех дочерних. но ёлки, в диве находится селект - я на селект навожу - всплывает mouseout на диве - почему, ведь селект внутри дива. и как отследить уход из div-a и всего его содержимого?

ZoNT 05.10.2008 11:38

в браузерах (в ФФ точно) есть баги: при переходе границы елементов может всплывать аут. Так что надо писать функции с таймером: на аут ставить таймер, а на овер - отменять.

Андрей Параничев 05.10.2008 13:36

ZoNT,
Разве это баги? Это стандартное всплывание события.

barmaley 05.10.2008 15:21

вообщем-то я оставил как есть - при переходе внутри элемента к другому элементу - сначала аут срабатывает и сразу-же over над внутренним элементом - т.е. при движении он прячется и тут-же показывается - вроде не мерцает

ZoNT 05.10.2008 22:40

Цитата:

Сообщение от Андрей Параничев (Сообщение 6688)
ZoNT,
Разве это баги? Это стандартное всплывание события.

естественно баги: если есть див, а в нём элемент поменьше, то при переходе див/элемент (кусор НЕ выходит за пределы дива) происходит мгновенный маусаут+маусовер дива.

verdim 09.07.2010 15:40

Люди !!!! Как хорошо, что я на Вас напал .... У меня происходит примерно такая же фигня:
есть несколько вложенных друг в друга div, два из них наложенные с разными z-index для создания меню. Стоят обработчики события onmouseover и onmouseout. И вот что диагностикой обнаружено:
цвет иконки путем сокрытия иконки меняется (иконки для того, чтобы все было видно нормально при любых условиях);
вначале срабатывает onmouseover (вроде все нормально, - так и должно быть), а затем сразу же срабатывает onmouseout и этим все заканчивается. И еще: не могу поймать разницу между выходом из меню вообще (чтобы закрыть все дочерние окна) и в родительское, чтобы закрыть исходное ....
Будьте добры, разъясните непонятливому (желательно на уровне детского сада) в чем моя ошибка и как ее исправить ...
С уважением, Дмитрий
P.S. Лучше продублировать мне на почту, чтобы всем было хорошо
(мало ли потеряю адрес).

Роман Валерьевич 05.10.2011 14:16

Цитата:

Сообщение от ZoNT (Сообщение 6701)
естественно баги: если есть див, а в нём элемент поменьше, то при переходе див/элемент (кусор НЕ выходит за пределы дива) происходит мгновенный маусаут+маусовер дива.

Цитата:

Сообщение от Андрей Параничев (Сообщение 6688)
ZoNT,
Разве это баги? Это стандартное всплывание события.

Меня этот вопрос тоже интересует. Столкнулся с подобной ситуацией в IE7. Если это всплывание события, то почему оно таким образом проявляется? Почему происходит моментальный вызов с возвратом mouseout, если никакие действия к генерации этого события не приводят.

Я склонен относить подобное поведение к глюку, но хочу разобраться окончательно чтобы точно знать.

dmitriymar 05.10.2011 14:34

это не глюк .дело в том что при вложенных элементах возникает событие оут у родительского при переходе на дочерний. но за счёт того что у вас обработчик на родительском и идёт всплытие -события генерируются в такой последовательности оут-всплытие события-овер.и почему пропускается оут в других браузерах это странно ,объяснение вижу только одно-вложенный контейнер пустой -а при пустых контейнерах событие как бы проваливается в нижний заполненный.и не важно родительский он или просто подложенный.прозрачность ему чуть поменяйте и проваливание отпадёт или бекграунд ему задайте


Часовой пояс GMT +3, время: 09:20.