如何在disabled = true后重新启用jQuery工具提示?

cod*_*ero 11 javascript jquery jquery-ui-tooltip

试图暂时禁用jQuery工具提示

$(document).tooltip( "option", "disabled", true );
Run Code Online (Sandbox Code Playgroud)

当我尝试再次重新启用它们时,所有title属性都消失了.我试图使用以下方法重新启用它们:

$(document).tooltip( "option", "disabled", false);
Run Code Online (Sandbox Code Playgroud)

title属性是当我第一次设置它实际上被完全删除disabledtrue.

还尝试过:

$(document).tooltip("disable");
$(document).tooltip("enable");
Run Code Online (Sandbox Code Playgroud)

它正在做同样的事情......

更新

在Jasen和zgr024的帮助下找到了我自己的问题的解决方案.见下文.

Jas*_*sen 5

这似乎是jquery版本的一个错误,因此您需要解决方法在禁用工具提示后插入title属性.

在需要重新启用的工具提示元素上使用类名,或使用[title]属性选择器.

<input type="text" class="tooltip-hack" title="tooltip text" />

$("#disable").on("click", function (e) {
    var tooltips = $("[title]");  // or $(".tooltip-hack")
    $(document).tooltip("disable");
    tooltips.attr("title", "");
});
Run Code Online (Sandbox Code Playgroud)

根据您的html结构使用两者中破坏性最小的.

此外,您还注意到所有标题属性都已删除,因此您可以使用工具提示更具选择性.

// instead of
$(document).tooltip();

// use a more restrictive selector
$(".tooltip-hack").tooltip();
Run Code Online (Sandbox Code Playgroud)

工作示例:jsFiddle


cod*_*ero 5

所以在上面的其他人的帮助下,我终于找到了更好的解决方案.这不需要残酷的修复来重新添加title到每个元素.不要误会我的意思,修复会起作用,但性能很重要(特别是我仍然需要支持IE8).

基本上我将自定义变量添加到工具提示对象,这也可以是全局变量.因为所有东西都是Objectjs,你可以添加你想要的任何东西.

$(document).tooltip.temporarilyOff
Run Code Online (Sandbox Code Playgroud)

然后当我初始化jQuery工具提示时,我只需要添加一个检查open:

var settings = {};
settings.tooltipClass = "tooltip";
settings.open = function (event, ui) {
    if ($(document).tooltip.temporarilyOff) {
        ui.tooltip.stop().remove();
    }
};
$(document).tooltip(settings);
Run Code Online (Sandbox Code Playgroud)

然后,当我需要暂时禁用jQuery工具提示时,我只需要在任何我想要的地方切换标志.像这样:

$(document).tooltip.temporarilyOff = true;
Run Code Online (Sandbox Code Playgroud)

在此之后的任何事情,工具提示都不会被触发,并且所有元素都将保留其title属性.当我完成我正在做的事情时,我只需要将标志设置回来,false并且tooltip将像以前一样工作.

我可以把它变成jQuery插件,以便更容易调用,也可以隐藏稍微丑陋的变量名......但无论如何这就是主意.我认为这是一个更好的解决方案,因为它不会强制jQuery删除title属性,然后再将它添加回来做两次无用的工作.

这是来自@Jasen的原始jsFiddle 的更新示例: