如何在禁用的jquery小部件上调用destroy?

时间:2015-07-08 09:54:47

标签: javascript jquery jquery-widgets jquery-events

二手图书馆:jquery-ui-1.9.1jquery-1.8.2

我有一个小部件,其中包含一些来自destroy

的函数
$.widget("my.customwidget", {

    options: {

    },

    _destroy: function () {
        var self = this;

        this._super();
        //some usefull functionality
    },

    //some other declarations
});

如果我的窗口小部件被禁用,由于jquery-ui中的代码,不调用destroy方法(来自jquery-ui的代码):

function handlerProxy() {
    // allow widgets to customize the disabled handling
    // - disabled as an array instead of boolean
    // - disabled class as method for disabling individual parts
    if ( instance.options.disabled === true || $( this ).hasClass( "ui-state-disabled" ) ) {
        return;
    }
    return ( typeof handler === "string" ? instance[ handler ] : handler )
                    .apply( instance, arguments );
            }

handleProxy位于_on函数内。 callStack看起来像这样: 删除包含我的窗口小部件的元素后,将调用$.cleanData。比cleanData调用$( elem ).triggerHandler( "remove" )并触发_on事件的调用remove。删除电话$.widget.destroy

即使在禁用的小部件上,如何调用销毁功能?

更新:为演示创建了jsFiddle http://jsfiddle.net/9yygj1wm/

更新:这已在jquery-ui-1.9.2中修复,但如何在不升级库的情况下修复它?

1 个答案:

答案 0 :(得分:0)

嗨,我不知道深入流动,但根据我的蛮力,我发现这是解决问题

$("#destroyWidget").click(function () {
    $("a").simpleWidget("enable");
    $("a").remove();

});

暂时使用这个,专家会解释:)