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

时间:2014-07-11 18:18:28

标签: javascript jquery jquery-ui-tooltip

尝试暂时禁用jQuery工具提示

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

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

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

当我第一次将title属性设置为disabledtrue时,$(document).tooltip("disable"); $(document).tooltip("enable"); 属性实际上已被完全删除。

也尝试过:

{{1}}

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

更新

在Jasen和zgr024的帮助下找到了我自己的问题的解决方案。请参阅below

3 个答案:

答案 0 :(得分:5)

这似乎是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

答案 1 :(得分: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的updated example

答案 2 :(得分:0)

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

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

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

我已经验证了此方法可用于覆盖默认值