检测到多个事件应该只有一个

时间:2015-04-15 09:19:39

标签: javascript jquery

我有一个指示符元素,当我将其悬停时它应该会消失,并且替换应该出现在同一个地方。

现在当我离开这个替代品时,它现在应该消失了,旧指示器应该再次放置它。

以下是指标或触发器的HTML:

<div class="help-trigger for-desktop">
    <div class="bg">
        <h4>HELP ME<i class="icon-double-angle-right"></i><i class="icon-double-angle-left"></i></h4>
    </div>
</div>
<div class="help-trigger for-mobile">
    <div class="bg">
    </div>
</div>

这是jQuery代码:

jQuery('.help-trigger.for-mobile').hover(function(){
    jQuery(this).stop( true, true ).hide();
    jQuery('.help-trigger.for-desktop').stop( true, true).show();
    jQuery('.help-trigger.for-desktop').mouseout(function(){
        jQuery(this).stop( true, true ).hide();
        jQuery('.help-trigger.for-mobile').stop( true, true ).show();
    });
});

这一般起作用,但它有点闪烁,而且不稳定。检测到的事件比他们应该检测到的更多(缺少更好的单词)所以即使我没有留下.for-desktop元素,我也会得到太多变化

2 个答案:

答案 0 :(得分:2)

您每次(!)添加.mouseout()事件处理程序时,将您的移动悬停在.help-trigger.for-mobile元素上。所以在每个mouseout上你都会调用几个处理程序......这是你的目的吗?

编辑:此外,使用只有一个回调的.hover()将为mouseenter mouseleave添加处理程序,因此在每个mouseenter和mouseleave上为.mouseout添加其他处理程序

答案 1 :(得分:0)

嘿,我认为你试图实现这样的目标:

$('.help-trigger.for-mobile').hover(function() {
        $(this).hide();     
    }, function() {
        $(this).show();
    });

你将.mouse放在鼠标悬停内,不能那样工作:https://api.jquery.com/hover/