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


试图暂时禁用jQuery工具提示

$(document).tooltip( "option", "disabled", true );

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

$(document).tooltip( "option", "disabled", false);

title 当我第一次将其设置为时,实际上会完全删除这些属性 disabled 至 true

还尝试过:

$(document).tooltip("disable");
$(document).tooltip("enable");

这是做同样的事情......

更新

在Jasen和zgr024的帮助下找到了我自己的问题的解决方案。看到 下面


10468
2017-07-11 18:18


起源

当您重新启用工具提示时应继续工作.. jsfiddle.net/D8gMy - Pedro Estrada
这个 的jsfiddle 不 不 继续使用jquery v2.1.0和ui v1.11。您使用的是哪个版本的库?这看起来像一个bug。 - Jasen
jQuery v1.11.1 jQuery UI - v1.11.0 - codenamezero
看起来我使用你的第一个例子重现了同样的问题。我切换小提琴使用外部源 http://code.jquery.com/jquery-1.11.1.js 和 http://code.jquery.com/ui/1.11.0/jquery-ui.js。最初它可以工作,但是一旦我点击禁用,我就会遇到同样的问题。该 title 属性也从元素中删除。 - codenamezero
你将需要重新添加title属性,因为禁用标志正在使用removeAttr('title')...尝试在禁用之前将其设置为变量,这样你就可以将它添加回来...但是它有点愚蠢 - zgr024


答案:


这似乎是jquery版本的一个错误,所以你需要一个解决方法来插入 标题 禁用工具提示后的属性。

在需要重新启用的工具提示元素上使用类名,或使用 [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", "");
});

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

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

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

// use a more restrictive selector
$(".tooltip-hack").tooltip();

工作范例: 的jsfiddle


5
2017-07-11 19:21



有没有办法访问/修改全局jquery.ui.tooltip对象?我想修改 open 动态。 - codenamezero
您可以使用 .tooltip({ open: function(e, ui){} }) 然后你可以指定一个要运行的函数。如果您需要更多帮助,您应该打开一个新问题。 - Jasen


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

基本上我将自定义变量添加到工具提示对象,这也可以是全局变量。因为一切都是 Object 在js中,你可以添加你想要的任何东西。

$(document).tooltip.temporarilyOff

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

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

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

$(document).tooltip.temporarilyOff = true;

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

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

这里是 更新的例子 从@Jasen的原始jsFiddle分叉:


5
2017-07-11 22:50





Codenamezero是在jQuery / js中扩展对象的一个​​很好的例子,但你可以开箱即用:

$(document).tooltip("disable").tooltip("hide"); 

$(document).tooltip("enable").tooltip("show");  

我有验证这个方法可以用来覆盖默认值


0
2018-04-14 13:58



这很酷,这是新的吗?几年前我不记得有这个功能了...谢谢你的提示! - codenamezero