hover()
Метод hover()
элементам текущей выборки устанавливает 1 или 2 обработчика событий mouseenter
и mouseleave
. Используются именно эти события, а не mouseover
и mouseout
. Событие mouseenter
используется, потому что оно не всплывает. Обработчик сработает один раз при наведении курсора на элемент, и не будет срабатывать при наведении курсора на его потомков. Событие mouseleave
используется, потому что оно не срабатывает при переводе курсора с самого элемента на его потомков (ведь курсор остаётся в пределах элемента) и оно тоже не всплывает.
Удаляются обработчики, установленные данным методом, вызовом:
jQ_object.off('mouseenter mouseleave')
Варианты использования
jQ_object.hover(обработчик-1, обработчик-2) => jQuery
-
Устанавливает первый обработчик на событие
mouseenter
, а второй - на событиеmouseleave
. Данный вариант является укороченным вызовом:jQ_object.on({ 'mouseenter': обработчик-1, 'mouseleave': обработчик-2 })
jQ_object.hover(обработчик) => jQuery
-
Устанавливает на события
mouseenter
иmouseleave
один общий обработчик. Данный вариант является укороченным вызовом:jQ_object.on('mouseenter mouseleave', обработчик)
Примеры
<html> <head> <title>Работа с событиями в jQuery</title> <script type="text/javascript" src="js/jquery.js"></script> </head> <style> .outerBox { box-sizing: border-box; width: 200px; height: 140px; margin: 20px; padding: 35px 50px; background: #972; } .innerBox { width: 100px; height: 70px; background: #279; } </style> <body> <div id="box1" class="outerBox"> <div class="innerBox"> mouseover: <u class="in">0</u><br> mouseout: <u class="out">0</u> </div> </div> <div id="box2" class="outerBox"> <div class="innerBox"> mouseenter: <u class="in">0</u><br> mouseleave: <u class="out">0</u> </div> </div> </body> </html> <script> function handlerIn() { $('.in', this).text(function(i, count) {return +count + 1}); } function handlerOut() { $('.out', this).text(function(i, count) {return +count + 1}); } /* На элементе #box1 обрабатываются события mouseover и mouseout */ $('#box1').on({ 'mouseover': handlerIn, 'mouseout': handlerOut }); /* На элементе #box2 обрабатываются события mouseenter и mouseleave */ $('#box2').hover(handlerIn, handlerOut); </script>
mouseout: 0
mouseleave: 0
В первом случае при переводе курсора на innerBox
срабатывает событие mouseout
для внешнего элемента outerBox
, хотя курсор остаётся в пределах элемента. Затем срабатывает событие mouseover
для внутреннего элемента innerBox
, которое всплывает и запускает обработчик внешнего элемента outerBox
. Такая же картина наблюдается и при наведении курсора на элементы <u>
.
Во втором случае обработчики handlerIn
и handlerOut
запускаются по одному разу при наведении и потере курсора элементом outerBox
.