Я знаю различные модели событий в Javascript (модель WC3 по сравнению с моделью Microsoft), а также разницу между пузырьками и захватом. Однако через несколько часов, читая различные статьи об этой проблеме, я все еще не уверен, как правильно кодировать следующее, казалось бы, простое поведение:Javascript: несколько событий mouseout, вызванных
Если у меня есть внешний div
и внутренний элемент div
, я хочу, которое вызывается, когда мышь покидает внешний-div. Когда мышь пересекает внутренний-div на внешний-div, ничего не должно произойти, и когда мышь пересекает внешний-div во внутренний div, ничего не должно произойти. Событие должно только огонь, если мышь перемещается из внешнего-div на соседнюю страницу.
<div id="outer" style = "width:20em; height:20em; border:1px solid #F00" align = "center" onmouseout="alert('mouseout event!')" >
<div id="inner" style = "width:18em; height:18em; border:1px solid #000"></div>
</div>
Теперь, если я помещаю «MouseOut» событие на внешнем DIV, два MouseOut события вызывается, когда мышь перемещается от внутрипартийных дел до окружающей страницы, потому что пожары события один раз, когда мышь перемещается из внутренней в внешнюю, а затем снова, когда она перемещается из внешней к окружающей странице.
Я знаю, что могу отменить событие, используя ev.stopPropagation()
, поэтому я попытался зарегистрировать обработчик события с внутренним-div, чтобы отменить распространение события. Однако это не будет препятствовать тому, чтобы событие срабатывало, когда мышь перемещается из внешнего-div во внутренний-div.
Итак, если я не замечаю что-то, мне кажется, что это поведение невозможно выполнить без сложных функций отслеживания мыши. В будущем я планирую переопределить многие из этого кода, используя более продвинутую структуру, такую как JQuery, но пока мне интересно, есть ли простой способ реализовать описанное выше поведение в обычном Javascript.
Может ли страница обрабатывать элементы как объединенные? Как и внешний-div, это будет просто «внешний-div», а затем внутренний-div внутри него будет «outer-div + inner-div», поэтому, если вы пересекаете их, он рассматривает их как два отдельных, оба с событием onmouseout, прикрепленным к ним обоим? Кажется странным, но похоже, что страницы здесь работают. – animuson