简体   繁体   English

在动态加载内容期间取消jquery工具提示

[英]cancel jquery tooltip during dynamic loading of content

I'm using the jQuery tooltip to show content that is dynamically loaded (javascript below). 我正在使用jQuery工具提示来显示动态加载的内容(下面的JavaScript)。 In some cases when the mouse moves away from the element the tooltip doesn't go away. 在某些情况下,当鼠标从元素上移开时,工具提示不会消失。 My theory is that the loading of the dynamic content introduces a slight delay so the mouse moves away from the element just before the tooltip function completes and so it doesn't consume the mouseleave event. 我的理论是,动态内容的加载会引起轻微的延迟,因此鼠标会在工具提示功能完成之前从元素移开,因此不会消耗mouseleave事件。 Any way to resolve this? 有什么办法解决这个问题?

element.tooltip(
        {
            items: "table.orderlist label",
            open: function (event, ui)
            {
                ui.tooltip.css("max-width", "600px");
                ui.tooltip.css("max-height", "300px");
                ui.tooltip.css("overflow", "hidden");
            },
            content: function (callback)
            {
                //Get the contents as the tooltip is popping up
                MyAjaxCall(iID,
                    function (result)
                    {
                        try
                        {
                            //success
                            callback(result) //returns the result
                        }
                        catch (e)
                        {
                            DisplayError(e);
                        }
                    },
                    function (result)
                    {
                        //Error
                        DisplayError(result);
                    });
            }
        });

Your content function should be a bit more complicated, the possible solution is: 您的内容函数应该稍微复杂一些,可能的解决方案是:

content: function (callback)
{    
    var $this = $(this), isMouseOn = true; 
    // check if tooltip ajax-request is in progress 
    // really needed for slow scripts only
    if($this.data('tt-busy')) return;
    // check if el is hovered (in jquery <= 1.8 you can simly use .is(':hover')
    $this
        .data('tt-busy', true)
        .on('mouseenter.xxx', function() { isMouseOn = true; })
        .on('mouseleave.xxx', function() { isMouseOn = false; });  
    //
    $.get('slow.script', function(d) {
        if(isMouseOn) callback(d);
    }).always(function() {
        // even if result fails set loading var to false and unbind hover events
        $this
            .data('tt-busy', false)
            .off('.xxx');
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM