我正在学习和使用jQuery并想要为某些元素显示一个删除图标。
我有一个外部主div,其中包含多个元素的包装器。在元素包装器内部,当用户悬停在元素包装器上时,我希望显示一个删除图标,并在用户移出元素包装器时将其删除。
使用mouseover
和mouseout
,我可以显示和删除图标,但是一旦我将鼠标移动到删除图标上,它就被删除了,因为它触发了元素包装器的mouseout
事件。我做错了什么?
我正在学习和使用jQuery并想要为某些元素显示一个删除图标。
我有一个外部主div,其中包含多个元素的包装器。在元素包装器内部,当用户悬停在元素包装器上时,我希望显示一个删除图标,并在用户移出元素包装器时将其删除。
使用mouseover
和mouseout
,我可以显示和删除图标,但是一旦我将鼠标移动到删除图标上,它就被删除了,因为它触发了元素包装器的mouseout
事件。我做错了什么?
两个选项供您选择:
:hover
伪类(但仅限于不需要支持IE6的情况)mouseenter
和mouseleave
事件: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不支持除a
元素外的:hover
伪类。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
的问题是因为它们冒泡,所以当你的鼠标移动到删除元素时,父元素上的 mouseout
处理程序会看到下面元素冒泡的 mouseout
。mouseenter
和 mouseleave
不会冒泡,因此它们没有这个问题。mouseover
和mouseout
而不是mouseenter
和mouseleave
。再次说明,它们是不同的事件,行为也不同(请参见上面答案末尾的注释)。但是,如果您真的在使用mouseenter
和mouseleave
,那么似乎您没有在mouseleave
上删除元素。如果您这样做,它就可以正常工作:http://jsbin.com/umalu4/2 但是添加到DOM并从DOM中删除比显示/隐藏更重量级,因此建议使用显示/隐藏。 - T.J. Crowder你尝试使用mouseenter
和mouseleave
事件了吗?
您可以在jQuery事件onmouseover和onmouseout上应用样式。当用户悬停在菜单上时,此事件将触发,您可以设置效果。
<style type="text/css">
.menu {
background-color: #CDDC39;
list-style: none;
margin: 100px;
padding: 0;
width: 10em;
}
.menu li {
margin: 0;
padding: 5px;
}
.menu a {
color: #333;
}
</style>
<ul class="menu">
<li onmouseover="this.style.backgroundColor='#F44336';" onmouseout="this.style.backgroundColor='transparent';" style="background-color: transparent;">
<a href="http://www.infinetsoft.com/">learn dot net skills</a>
</li>
<li onmouseover="this.style.backgroundColor='#F44336';" onmouseout="this.style.backgroundColor='transparent';" style="background-color: transparent;">
<a href="http://www.infinetsoft.com/htmltry">Work out html</a>
</li>
<li onmouseover="this.style.backgroundColor='#F44336';" onmouseout="this.style.backgroundColor='transparent';" style="background-color: transparent;">
<a href="http://www.infinetsoft.com/Category/JQuery/9/1">jQuery tutorials</a>
</li>
</ul>