单击时工具提示叠加不会消失

时间:2012-02-22 18:13:33

标签: javascript jquery jquery-ui

我对jquery很新,我遇到了一个bug。每当我将鼠标悬停在我页面上的按钮上时,都会显示一个小工具提示。当我移动鼠标时,它会消失。但是,如果我单击按钮,工具提示会卡住,我不知道为什么。它只是停留在那里,直到我重新加载页面。这是代码:

_controls.html.erb

    <%= link_to 'Abandoned', priority, :class => 'abandoned', :'data-status' => 'abandoned',
                            :title => 'Mark as ABANDONED', :rel => 'tipsy' %>
    <%= link_to 'New', priority, :class => 'new', :'data-status' => 'new',
                            :title => 'Mark as NEW', :rel => 'tipsy' %>
    <%= link_to 'Started', priority, :class => 'started', :'data-status' => 'started',
                            :title => 'Mark as STARTED', :rel => 'tipsy' %>
    <%= link_to 'Completed', priority, :class => 'completed', :'data-status' => 'completed',
                            :title => 'Mark as COMPLETED', :rel => 'tipsy' %>
</div>

优先级jquery js文件的一部分

...
jQuery.fn.priority = function()
{
    var priority = this;

    priority.bind('click', function(event) {
        event.stopPropagation();
        priority.selectPriority();
    });

    priority.bind('unselected', function() {
        priority.find('a.more').tipsy('hide');
    });

...

jQuery.fn.selectPriority = function()
{
    $('.priority.selected').not(this).unselectPriority();
    this.addClass('selected');
};

jQuery.fn.unselectPriority = function()
{
    this.triggerHandler('unselected');
    this.removeClass('selected');
};

点击按钮后工具提示叠加层没有消失的任何想法?

PS我没有写这段代码我只是想尝试调试它。如果这不是工具提示所在位置的正确代码,请告诉我。

更新:工具提示有时会卡住。我删除了event.stopPropagation();它仍然发生了。

2 个答案:

答案 0 :(得分:2)

您可以尝试取出绑定并直接在事件中调用tipsy hide,如下所示:$('#element').tipsy('hide')这可能有助于您调试它。我的一些东西遇到了同样的问题,并且调用hide解决了它。在详尽的页面上查看“手动触发工具提示”:http://onehackoranother.com/projects/jquery/tipsy/

另一种选择是在元素上使用delayOut函数,如下所示:

 $('.mg-unrd').tipsy({gravity:'s', delayIn: 10, delayOut: 5});

延迟对我来说比躲起来更好,但有时还给了我鬼。

实际上,我发现这段代码解决了它的正确...在Tipsy.js文件中,在第170行附近,我向eventOut添加了一个mousedown,万岁!

//eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
eventOut = options.trigger == 'hover' ? 'mousedown mouseleave' : 'blur';

答案 1 :(得分:0)

很难从您提供的代码片段中看出来,但尝试将事件注释掉.stopPropagation();并看看它是做什么的。