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.