Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取jQueryUI小部件的名称?_Javascript_Jquery_Jquery Ui_Widget - Fatal编程技术网

Javascript 如何获取jQueryUI小部件的名称?

Javascript 如何获取jQueryUI小部件的名称?,javascript,jquery,jquery-ui,widget,Javascript,Jquery,Jquery Ui,Widget,我需要一种读取jQueryUI小部件名称的方法。我将对话框小部件分为两个子类,myDialog1和myDialog2。我创建了一个destronDialog函数来销毁激活的对话框。应该有一种方法来确定小部件实例的名称 我想做的是这样的: var destroyDialog = function() { activeDialog[activeDialog.widgetName]("destroy"); } 但我看不到一种获取小部件名称的方法。现在我使用的是丑陋的嵌套try-catch语句

我需要一种读取jQueryUI小部件名称的方法。我将
对话框
小部件分为两个子类,
myDialog1
myDialog2
。我创建了一个
destronDialog
函数来销毁激活的对话框。应该有一种方法来确定小部件实例的名称

我想做的是这样的:

var destroyDialog = function() {
    activeDialog[activeDialog.widgetName]("destroy");
}
但我看不到一种获取小部件名称的方法。现在我使用的是丑陋的嵌套try-catch语句

var destroyDialog = function() {
        try {
            activeDialog.dialog("destroy");
        }
        catch (e) {
            try {
                activeDialog.myDialog1("destroy");
            }
            catch (e) {
                activeDialog.myDialog2("destroy");
            }
        }
    }

如果标准化名称空间,则可以使用正则表达式来匹配存储小部件实例的变量的名称(小部件的名称),该变量由方法返回

for(i单位为$().data()){
if(i.match(/dialog/)){
$().data(i).destroy();
}
}

您可以使用

。。。正如马丁所说。因此:

activeDialog[activeDialog.data("widgetName")]("destroy");
但是为了解决这个问题,我写了一个插件,它允许你在不知道小部件是什么类型的情况下调用小部件方法。这将允许您执行以下操作:

activeDialog.callWidgetMethod('destroy');

它依赖于您使用jQueryUI1.11+。如果您使用的是感谢您的帮助,但我的两个“子类”小部件不是$.ui.dialog的实例,而是它们自己的小部件,它们从dialog继承方法$(this).dialog()引发错误-它需要$(this).myDialog1()或$(this).myDialog2(),这就是为什么我需要知道如何获取小部件名称。哦,抱歉,我不明白你在做什么。如果您执行$().data();它将返回一个包含所有jqueryUi特定数据的对象,该对象中的一个元素是您的小部件名称(如果小部件名称中有一个点,如activeDialogMyDialog2,则使用camelCased)。您可以以易于获取的方式命名小部件。
activeDialog[activeDialog.data("widgetName")]("destroy");
activeDialog.callWidgetMethod('destroy');
jQuery.fn.callWidgetMethod = function () {
    var args = arguments;
    var result = null;
    if(!this || !this.length) 
        return this;

    this.each(function (i,o) {
        var compClass = $(this).data("widgetName");
        var func = $(this)[compClass];
        // Skip this element if it does not appear to be an initialised jQuery widget
        if(!compClass || !func)
            return true;

        // Skip this widget if it does not have the method (the name of which will be in args[0])
        // This relies on the 'instance' method provided in jQuery UI 1.11
        if(args.length>1 && !$(this)[compClass]("instance")[args[0]])
            return true;

        result = func.apply($(this),args);
    });

    if(this.length>1) 
        return this;
    else 
        return result;
};