【发布时间】:2014-10-04 11:16:55
【问题描述】:
在以下示例中,当我将鼠标悬停在“X”按钮上时,列表项 hover 样式也会启用,我不希望这种情况发生。
按钮上的hover 样式是否可以独立于list-group-item 上的hover 样式?诸如防止“悬停”传播之类的东西?
还有其他方法可以实现吗?也许以不同的方式组装所有这些 HTML/CSS/JS?
<ul class="list-group">
<li class="list-group-item">
Lalalalaiaia
<button class="btn btn-default btn-xs pull-right remove-item">
<span class="glyphicon glyphicon-remove"></span>
</button>
</li>
<li class="list-group-item">
Panananannaeue
<button class="btn btn-default btn-xs pull-right remove-item">
<span class="glyphicon glyphicon-remove"></span>
</button>
</li>
</ul>
CSS
.list-group-item:hover {
background: #fafafa;
cursor: pointer;
}
JavaScript
$('.list-group-item').on('click', function(){
console.log('clicked item');
});
$('.remove-item').on('click', function(e){
console.log('clicked remove-item btn');
e.stopPropagation();
});
更新
问题似乎是当鼠标悬停在内部 X 按钮时,鼠标实际上并没有离开 'list-group-item' 元素,因此,它保持悬停状态。
我能够通过在“删除项目”按钮的 mouseleave 和 mouseenter 事件中的“列表组项目”上手动调度 mouseenter 和 mouseleave 来解决这个问题,而无需需要使用'event.stopPropagation()'(按钮点击处理程序除外)。
缺点是我需要两个元素的mouseenter 和mouseleave 事件处理程序。我最好只使用 CSS,但这似乎是不可能的。
我只是不确定这是否是一个干净的解决方案,你怎么看?
CSS
.list-group-item.mouseover {
background: #fafafa;
cursor: pointer;
}
.list-group-item .remove-item.mouseover {
background: #aaf;
cursor: pointer;
}
JavaScript
// LIST-ITEM EVENT HANDLERS
$('.list-group-item').on('mouseenter', function(e){
$(this).addClass('mouseover');
}).on('mouseleave', function(e){
$(this).removeClass('mouseover');
});
$('.list-group-item').on('click', function(){
console.log('clicked item');
});
// LIST-ITEM REMOVE BUTTON EVENT HANDLERS
$('.remove-item').on('mouseenter', function(e){
$(this).addClass('mouseover');
$(this).parent().mouseleave();
}).on('mouseleave', function(e){
$(this).removeClass('mouseover');
$(this).parent().mouseenter();
});
$('.remove-item').on('click', function(e){
console.log('clicked remove-item btn');
e.stopPropagation();
});
【问题讨论】:
-
只需为
.list-group-item:hover button创建一个样式,取消组项本身的悬停样式。 -
@Pointy - 但是
.list-group-item:hover button上的规则会更改按钮的 CSS,而不是列表项,这是 OP 想要更改的。当您将鼠标悬停在按钮上时,他希望它不会激活列表悬停(或看起来不像激活)。 -
@j08691 哦,好吧,我猜他不希望按钮受到列表组上可继承样式的影响,但看看那些我不知道为什么;背景可能不会改变按钮背景。也许是光标?
-
@Pointy,正好相反,就像 j08691 写的:)
-
@zok 哦哦,我明白了。因此,您希望它在您越过它时使项目变暗,但是当您越过按钮时,它应该不保持项目变暗。这对 CSS 来说很难/不可能。我有点想知道它是否看起来不会有点奇怪。我的意思是,毕竟光标仍然在项目上。
标签: javascript jquery html css mouseover