Я знаю о различных моделях событий в Javascript (модель WC3 и модель Microsoft), а также о разнице между пузырями и захватом. Однако, после нескольких часов чтения различных статей по этой проблеме, я все еще не уверен, как правильно кодировать следующее, казалось бы, простое поведение:
Если у меня есть внешний div
и внутренний div
элемент, я хочу, чтобы одно событие отключения мыши вызывалось, когда мышь покидает внешний div. Когда мышь переходит от внутреннего div к внешнему div, ничего не должно происходить, а когда мышь переходит из external div в inner 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, два события mouse-out будут запущены, когда мышь переместится из inner-div на окружающую страницу, потому что событие срабатывает один раз, когда мышь перемещается изнутри наружу, а затем снова, когда она перемещается из наружи на окружающую страницу.
Я знаю, что могу отменить событие, используя ev.stopPropagation()
, поэтому я попытался зарегистрировать обработчик событий с помощью внутреннего div, чтобы отменить распространение события. Тем не менее, это не помешает событию сработать, когда мышь переместится из внешнего div во внутренний div.
Так что, если я что-то не замечаю, мне кажется, что такое поведение невозможно осуществить без сложных функций отслеживания мыши. В будущем я планирую переопределить большую часть этого кода, используя более продвинутый фреймворк, такой как JQuery, но сейчас мне интересно, есть ли простой способ реализовать вышеуказанное поведение в обычном JavaScript.