В чем разница между mouseout () и mouseleave () в jQuery?
Ответы:
Событие mouseleave отличается от mouseout тем, как оно обрабатывает восходящую цепочку событий. Если бы в этом примере использовался mouseout, то, когда указатель мыши переместился из внутреннего элемента, обработчик сработал бы. Обычно это нежелательное поведение. Событие mouseleave, с другой стороны, запускает свой обработчик только тогда, когда мышь покидает связанный с ним элемент, а не его потомок. Итак, в этом примере обработчик запускается, когда мышь покидает внешний элемент, но не внутренний элемент.
Источник: http://api.jquery.com/mouseleave/
Бывают случаи, когда mouseout
лучше, чем mouseleave
.
Например, предположим, что вы создали всплывающую подсказку, которая должна отображаться рядом с элементом mouseenter
. Вы используете, setTimeout
чтобы всплывающая подсказка не всплывала мгновенно. Вы очищаете тайм-аут при mouseleave
использовании, clearTimeout
поэтому, если мышь покидает всплывающую подсказку, не отображается. Это будет работать в 99% случаев.
Но теперь предположим, что элемент, к которому у вас прикреплена всплывающая подсказка, представляет собой кнопку с click
событием, и давайте также предположим, что эта кнопка предлагает пользователю либо поле, confirm
либо alert
поле. Пользователь нажимает кнопку и alert
стреляет. Пользователь нажимал ее достаточно быстро, чтобы всплывающая подсказка не отображалась (пока все хорошо).
Пользователь нажимает alert
кнопку ОК, и мышь покидает элемент. Но поскольку страница браузера теперь находится в заблокированном состоянии, ни один javascript не будет запускаться, пока не будет нажата кнопка OK, а это означает, что ваше mouseleave
событие НЕ БУДЕТ ПОЖАРОМ . После того, как пользователь нажмет OK, появится всплывающая подсказка (а это не то, что вы хотели).
Использование mouseout
в этом случае было бы подходящим решением, потому что оно сработает.
mouseout
в таком случае будет стрелять? Разве браузер не будет по-прежнему заблокирован mouseout
?
Документ jQuery API:
mouseout
Этот тип события может вызвать много головной боли из-за всплытия событий. Например, когда указатель мыши перемещается из внутреннего элемента в этом примере, событие mouseout будет отправлено ему, а затем просочится во внешний. Это может вызвать связанный обработчик mouseout в неподходящее время. См. Обсуждение .mouseleave () для полезной альтернативы.
Так mouseleave
же и индивидуальное мероприятие, которое было разработано по вышеуказанной причине.
Событие Mouseout срабатывает, когда мышь покидает выбранный элемент, а также когда мышь покидает его дочерние элементы.
Событие Mouseleave element сработает, когда указатель покинет только выбранный элемент.
Ссылка: W3School