В чем разница между mouseout () и mouseleave () в jQuery?

Ответы:

101

Событие mouseleave отличается от mouseout тем, как оно обрабатывает восходящую цепочку событий. Если бы в этом примере использовался mouseout, то, когда указатель мыши переместился из внутреннего элемента, обработчик сработал бы. Обычно это нежелательное поведение. Событие mouseleave, с другой стороны, запускает свой обработчик только тогда, когда мышь покидает связанный с ним элемент, а не его потомок. Итак, в этом примере обработчик запускается, когда мышь покидает внешний элемент, но не внутренний элемент.

Источник: http://api.jquery.com/mouseleave/

Медер Омуралиев
источник
1
mouseover против mouseenter: jsfiddle.net/hejdav/945pv53h/3 ( mouseout и mouseleave эквивалентно)
hejdav
Приведенное выше объяснение становится намного более ясным, когда я вижу, что оба метода работают, и разница между ними, сработавшая для меня.
invinciblemuffi
15

Бывают случаи, когда mouseoutлучше, чем mouseleave.

Например, предположим, что вы создали всплывающую подсказку, которая должна отображаться рядом с элементом mouseenter. Вы используете, setTimeoutчтобы всплывающая подсказка не всплывала мгновенно. Вы очищаете тайм-аут при mouseleaveиспользовании, clearTimeoutпоэтому, если мышь покидает всплывающую подсказку, не отображается. Это будет работать в 99% случаев.

Но теперь предположим, что элемент, к которому у вас прикреплена всплывающая подсказка, представляет собой кнопку с clickсобытием, и давайте также предположим, что эта кнопка предлагает пользователю либо поле, confirmлибо alertполе. Пользователь нажимает кнопку и alertстреляет. Пользователь нажимал ее достаточно быстро, чтобы всплывающая подсказка не отображалась (пока все хорошо).

Пользователь нажимает alertкнопку ОК, и мышь покидает элемент. Но поскольку страница браузера теперь находится в заблокированном состоянии, ни один javascript не будет запускаться, пока не будет нажата кнопка OK, а это означает, что ваше mouseleaveсобытие НЕ БУДЕТ ПОЖАРОМ . После того, как пользователь нажмет OK, появится всплывающая подсказка (а это не то, что вы хотели).

Использование mouseoutв этом случае было бы подходящим решением, потому что оно сработает.

Дарси
источник
5
Не могли бы вы объяснить, почему mouseoutв таком случае будет стрелять? Разве браузер не будет по-прежнему заблокирован mouseout?
user31782
10

Документ jQuery API:

mouseout

Этот тип события может вызвать много головной боли из-за всплытия событий. Например, когда указатель мыши перемещается из внутреннего элемента в этом примере, событие mouseout будет отправлено ему, а затем просочится во внешний. Это может вызвать связанный обработчик mouseout в неподходящее время. См. Обсуждение .mouseleave () для полезной альтернативы.

Так mouseleaveже и индивидуальное мероприятие, которое было разработано по вышеуказанной причине.

http://api.jquery.com/mouseleave/

Дженди
источник
3

Событие Mouseout срабатывает, когда мышь покидает выбранный элемент, а также когда мышь покидает его дочерние элементы.

Событие Mouseleave element сработает, когда указатель покинет только выбранный элемент.

Ссылка: W3School

Шьям Джайсвал
источник