【发布时间】:2013-11-08 12:19:54
【问题描述】:
悬停时,我在元素中间显示了一个jQuery UI Tooltip。但是当将鼠标悬停在它上面时,工具提示本身就会消失。 (propagation 问题)
元素:
带有工具提示:
因此,当我将工具提示本身悬停时,它会消失,我想是由于传播问题。
HTML:
<div class="bar-wrapper">
<label class="bar-lbl active one" title="2013"><span>2013</span></label>
<div class="bar" data-percent="90"></div>
<div class="bar-rest-overlay" data-percent="10"></div>
</div>
<div class="bar-wrapper">
<label class="bar-lbl active one" title="2014"><span>2014</span></label>
<div class="bar" data-percent="80"></div>
<div class="bar-rest-overlay" data-percent="20"></div>
</div>
当前代码:
$('.bar-lbl').tooltip(
{
tooltipClass: 'bar-tooltip',
position:
{
my: 'center',
at: 'center'
}
});
部分修复(但使工具提示永久可见):
$('.bar-lbl').on('mouseleave',
function(e)
{
e.stopImmediatePropagation();
}).tooltip(
{
tooltipClass: 'bar-tooltip',
position:
{
my: 'center',
at: 'center'
}
});
不工作:
$('body').on('hover', '.ui-tooltip',
function(e)
{
e.stopImmediatePropagation();
});
更新:感谢Trevor,我找到了一个接近的解决方案。 (悬停时,它仍然使最后一个悬停的工具提示可见):
似乎,将鼠标悬停在工具提示本身时,它会隐藏。但是悬停在 .bar-lbl 元素之外,工具提示仍然可见,除非我悬停另一个 .bar-lbl 元素。
问题出在我的.bar-lbl 上的on('mouseleave') 事件中。我需要两条线,但它们会相互干扰。 (见 cmets)
$('.bar-lbl').on('mouseenter',
function(e)
{
$('.bar-lbl').not($(this)).tooltip('close'); // Close all other tooltips
}).on('mouseleave',
function(e)
{
e.stopImmediatePropagation(); // keeps tooltip visible when hovering tooltip itself
$('.bar-lbl').tooltip('close'); // I need this, but it breaks the line above, causing the tooltip to flicker
}).tooltip(
{
tooltipClass: 'bar-tooltip',
position:
{
my: 'center',
at: 'center'
}
});
$('body').on('mouseleave', '.ui-tooltip',
function(e)
{
$('.bar-lbl').tooltip('close');
});
【问题讨论】:
-
你真的需要这里的工具提示还是 css :hover 就足够了? Tooltip 会消失,因为当您将光标移到生成的 tooltip-div 上时,它会生成 mouseout-event。检查jsfiddle.net/xYS72/2
-
@Esa 我正在使用工具提示,因为它会显示其他数据,这些数据不适合我的元素,并且需要在所有其他元素上方可见。此工具提示内容仅作为示例。
-
您希望它何时关闭?
-
@Esa 悬停在元素外时。
-
最后一个工具提示仍然可见?你有不止一个工具提示。你能包括你的html吗?谢谢