我该怎么做?我需要完全禁用小部件,这意味着应该禁用所有实例,并且在禁用后可以创建更多实例。我试着搜索,但没有出现。
非常感谢您的帮助。
编辑:
一个更生动的例子。
说,我有三个实例,我的小部件放在三个元素上。然后我想关闭我的小部件。我调用一个静态方法turnOff,导致 a)所有工作实例都被禁用 b)如果稍后通过ajax调用该窗口小部件,则禁止创建该窗口小部件的任何其他实例,即 然后我希望它再次工作,所以我调用了turnOn()。
我的小部件是一个提示pugin,所以如果用户关闭提示,它们应该在任何地方关闭,并且应用程序中有些地方仍然异步加载页面的暗示部分。
这就是我需要做的事情。
答案 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");
}
);
}
});
请注意,我没有检查removeClass
中的标记,因为当鼠标悬停在窗口小部件上时,窗口小部件可能会被禁用,您可能不希望悬停颜色意外“粘住”。
从那里可以很容易地扩展到即使关闭时小部件也会改变元素的情况。我将逻辑作为伪代码:
base-widget
类(即使处于非活动状态)如果小部件已启用,请添加active-widget
课程并执行所需操作
要关闭,请从所有基本小部件中删除active-widget
类:$(".base-widget").removeClass('active-widget')
。您可能还需要对所有元素进行一些其他更改 - 但它们很容易找到。
active-widget
课程并调整其他所有内容只要将全局变量用作标志,您就可以将turnOn / turnOff功能嵌入到窗口小部件中。有关存储全局的其他选项,请参阅此答案:How to declare a global variable in JavaScript?
如果您遇到困难,您可以发布(简化版本)您的小部件代码以及您迄今为止尝试过的内容,并且有人可能会进一步提供帮助。