Два варианта для вас :
- CSS's
:hover
псевдокласс (но только если вам не нужно поддерживать IE6)
mouseenter
и mouseleave
события
CSS's :hover
псевдокласс
Вы можете заставить браузер выполнять всю работу, если вам не нужна поддержка IE6, с помощью псевдокласса :hover
:
/* Don't show `child` elements inside `parent` elements...*/
parent child {
display: none;
}
/* ...unless the `parent` element is being hovered over */
parent:hover child {
display: block; /* or inline-block or whatever */
}
Живой пример
Однако IE6 не поддерживает псевдокласс :hover
, за исключением элементов a
. IE7 + и все последние другие браузеры делают.
mouseenter
и mouseleave
события
Если CSS не делает этого за вас, вы ищете события mouseenter
и mouseleave
, которые специфичны для IE, но эмулируются jQuery во всех других браузерах. В jQuery даже есть удобная функция, hover
, для подключения обработчиков к обоим событиям, чтобы вы могли легко выполнить то, что вы хотите сделать.
$(...your parent element...).hover(
function() {
// Called when the mouse enters the element
},
function() {
// Called when the mouse leaves the element
}
);
Вот полный живой пример :
HTML:
<div>Hover over me <span class='del'>[X]</span></div>
<div>And me <span class='del'>[X]</span></div>
<div>And me <span class='del'>[X]</span></div>
JavaScript с использованием jQuery:
$('div').hover(
function() {
$(this).find('span.del').show();
},
function() {
$(this).find('span.del').hide();
}
);
Причина, по которой у вас возникли проблемы с mouseover
и mouseout
, заключается в том, что они bubble , и поэтому ваш обработчик mouseout
в родительском элементе видел пузырек mouseout
из базового элемента, когда Ваша мышь переместилась в элемент удаления. mouseenter
и mouseleave
не пузыриться, и поэтому у них нет этой проблемы.