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