完全禁用Jquery UI小部件

时间:2013-10-14 07:30:26

标签: javascript jquery jquery-ui

我该怎么做?我需要完全禁用小部件,这意味着应该禁用所有实例,并且在禁用后可以创建更多实例。我试着搜索,但没有出现。

非常感谢您的帮助。

编辑:

一个更生动的例子。

说,我有三个实例,我的小部件放在三个元素上。然后我想关闭我的小部件。我调用一个静态方法turnOff,导致 a)所有工作实例都被禁用 b)如果稍后通过ajax调用该窗口小部件,则禁止创建该窗口小部件的任何其他实例,即 然后我希望它再次工作,所以我调用了turnOn()。

我的小部件是一个提示pugin,所以如果用户关闭提示,它们应该在任何地方关闭,并且应用程序中有些地方仍然异步加载页面的暗示部分。

这就是我需要做的事情。

1 个答案:

答案 0 :(得分:1)

答案取决于你的小部件在不活动时是否显而易见 - 例如,如果它是悬停时显示的'提示'类型工具提示,那么你需要做的就是在它处于非活动状态时不显示工具提示。但是,如果它还添加了格式以显示提示的位置,则还需要撤消该提示。

让我们先看一下这个简单的例子 - 假设我们有一个简单的小部件filler,只需在鼠标悬停在元素上时添加一个类(filled)。然后在全局范围内只有一个变量:

enableFiller = true;

然后在您的小部件中检查:

$.widget( "spacedog.filler", {

    _create: function() {
        var progress = this.options.value + "%";
        this.element.hover(
            function() {
                if (enableFiller) { 
                    $(this).addClass("filled");
                }
            },
            function() {
                $(this).removeClass("filled");
            }
        );
    }

});

Fiddle

请注意,我没有检查removeClass中的标记,因为当鼠标悬停在窗口小部件上时,窗口小部件可能会被禁用,您可能不希望悬停颜色意外“粘住”。

从那里可以很容易地扩展到即使关闭时小部件也会改变元素的情况。我将逻辑作为伪代码:

  • 创建窗口小部件时,向该元素添加base-widget类(即使处于非活动状态)
  • 如果小部件已启用,请添加active-widget课程并执行所需操作

  • 要关闭,请从所有基本小部件中删除active-widget类:$(".base-widget").removeClass('active-widget')。您可能还需要对所有元素进行一些其他更改 - 但它们很容易找到。

  • 要启用,请重新添加active-widget课程并调整其他所有内容

只要将全局变量用作标志,您就可以将turnOn / turnOff功能嵌入到窗口小部件中。有关存储全局的其他选项,请参阅此答案:How to declare a global variable in JavaScript?

如果您遇到困难,您可以发布(简化版本)您的小部件代码以及您迄今为止尝试过的内容,并且有人可能会进一步提供帮助。