Могут быть случаи, когда mouseout
является лучшим выбором, чем mouseleave
.
Например, допустим, вы создали всплывающую подсказку, которая должна отображаться рядом с элементом в mouseenter
. Вы используете setTimeout
, чтобы всплывающая подсказка не появлялась мгновенно. Вы сбрасываете время ожидания на mouseleave
, используя clearTimeout
, поэтому, если мышь покидает подсказку, она не будет отображаться. Это будет работать в 99% случаев.
Но теперь давайте предположим, что элемент, к которому прикреплена всплывающая подсказка, - это кнопка с событием click
, и давайте также предположим, что эта кнопка предлагает пользователю либо поле confirm
, либо alert
. Пользователь нажимает кнопку и запускается alert
. Пользователь нажал ее достаточно быстро, чтобы всплывающая подсказка не имела возможности всплыть (пока все хорошо).
Пользователь нажимает кнопку OK alert
, и мышь покидает элемент. Но так как страница браузера теперь находится в заблокированном состоянии, никакой javascript не будет срабатывать до тех пор, пока не будет нажата кнопка «ОК», что означает, что ваше mouseleave
событие НЕ БУДЕТ ПОЖАРА . После того, как пользователь нажмет OK, всплывет всплывающая подсказка (а это не то, что вы хотели).
Использование mouseout
в этом случае будет подходящим решением, потому что оно сработает.