快速移动的鼠标永远不会触发mouseleave事件

时间:2012-08-03 17:58:06

标签: javascript mouseleave

当鼠标悬停在我网站上的某些按钮上时,我希望出现指示用户的工具提示。基本上,每当一个带有'has_tooltip'类的按钮被鼠标悬停时,就会附加一个工具提示。

$('.has_tooltip').live({
    mouseenter  : function(e) {
        if($('#tooltip_container').length > 0){
            $('#tooltip_container').remove();
        }

        var $t = $(this), text = $t.attr('rel'), left = e.pageX-25, top = e.pageY-25;
        if($t.attr('rev') === '1') {
            text += ' <span class="tooltip_warning">You must be <a href="/users/login" class="modal-dynamic">logged in</a> to make use of this.</span>'
        }
        $tooltip = $('<div id="tooltip_container">'+text+'</div>');
        $('body').prepend($tooltip);

        $tooltip.css({
            left: left+'px',
            top: top+'px'
        });

    },

});

当用户的光标离开新创建的工具提示框时,它应该消失

$('#tooltip_container').live({
    mouseleave : function(e){
        $(this).remove();
    }

});

但是,快速移动鼠标在具有'has_tooltip'类的按钮上会添加工具提示,但移动速度太快,无法触发mouseleave事件。

任何人都有一些关于如何解决这个问题的提示?

1 个答案:

答案 0 :(得分:2)

'如果鼠标没有进入工具提示(工具提示出现在鼠标下方),浏览器可能不会触发mouseleave事件。您可能想要添加其他选择器。试试这个:

$('#tooltip_container','.has_tooltip').live({
    mouseleave : function(e){
        $('#tooltip_container').remove();
    }
});

我强烈建议您从工具提示方法中删除HTML ...尝试创建一个空div并在显示时添加工具提示文本和定位 - 尝试尽可能少地添加到DOM中(创建大多数工具提示HTML的隐藏div,只在必要时更改其实际文本内容。

理想情况下,您的mouseenter应该只是替换工具提示文本并显示正确定位的div。 mouseleave事件应该只隐藏()工具提示div(不要将它从DOM中删除,只是为了创建并稍后再添加)。

相关问题