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

12

尝试暂时禁用 jQuery 工具提示

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

当我试图重新启用它们时,所有的title属性都消失了。我是用以下方式尝试重新启用它们的:

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

当我将title属性设置为disabledtrue时,实际上它被完全删除了。

也尝试过:

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

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

更新

在Jasen和zgr024的帮助下,我找到了自己问题的解决方案。请参见下面的链接


2
当您重新启用时,工具提示应继续工作。http://jsfiddle.net/D8gMy/ - Pedro Estrada
1
这个 jsfiddle 在使用jquery v2.1.0和ui v1.11版本后已经无法继续工作。你使用的库是哪个版本?看起来像是一个bug。 - Jasen
3
由于禁用标志使用了removeAttr('title'),因此您需要重新添加title属性... 尝试在禁用之前将其设置为变量,以便您可以添加回来... 但是,是的,这有点愚蠢。 - zgr024
1
是的,在禁用后请将.attr("title", "")插入元素中。您甚至不需要知道原始标题值——只需要裸露的title属性即可工作。请参阅http://jsfiddle.net/xMxqg/3/。 - Jasen
1
除非使用不同的版本,否则您可以添加一个类来获取它们所有,只需一行代码 $(".stupid-tooltips").attr("title", "") - Jasen
显示剩余6条评论
3个回答

6

这似乎是jquery版本的一个bug,因此您需要一个解决方法来在禁用工具提示后插入标题属性。

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


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

5
所以,在上面其他人的帮助下,我终于找到了一个更好的解决方案。它不需要对每个元素重新添加 title 的粗暴修复。不要误解,这种修复方法可以工作,但性能很重要(特别是我仍然需要支持 IE8 )。
基本上,我向工具提示对象添加了一个自定义变量,这也可以是全局变量。由于在 js 中一切都是 Object,所以可以随意添加任何内容。
$(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中fork过来的更新示例

1
Codenamezero是jQuery/js中扩展对象的一个很好的例子,但是你也可以直接使用内置功能实现此操作:
$(document).tooltip("disable").tooltip("hide"); 

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接