Javascript jQueryUI-在不同小部件上使用相同名称调用方法
假设我创建了几个小部件(mywidget1、mywidget2等),并且它们都有一个同名的方法(doSomething)。Javascript jQueryUI-在不同小部件上使用相同名称调用方法,javascript,jquery,jquery-ui,methods,widget,Javascript,Jquery,Jquery Ui,Methods,Widget,假设我创建了几个小部件(mywidget1、mywidget2等),并且它们都有一个同名的方法(doSomething)。 要调用我可以使用的方法,请执行以下操作: $("#elem").widget1("doSomething"); 但这样我需要知道小部件的名称(在示例widget1中)。 如果我有一个包含多个不同小部件实例的数组,如何在不知道小部件名称的情况下对每个小部件调用“doSomething”方法?你不能。您有两个选择: 将它们存储在单独的数组中(一个数组用于widget1,另
要调用我可以使用的方法,请执行以下操作:
$("#elem").widget1("doSomething");
但这样我需要知道小部件的名称(在示例widget1中)。如果我有一个包含多个不同小部件实例的数组,如何在不知道小部件名称的情况下对每个小部件调用“doSomething”方法?你不能。您有两个选择:
理论上,我想你可以做如下的事情:
var widgets = [widget1, widget2, widget3]; // etc, will assume they are defined already
// Access each Widget, now widget points to each of the widgets
// So we dont need to know the actual name like widget1, widget2 etc
widgets.forEach(function (widget) {
$('#elem').widget('doSomething'); // Call the doSomething method of this widget
$('#elem').widget.call(null, 'doSomething'); // Try this if the above fails
$('#elem').call(widget, 'doSomething'); // Or maybe this :)
}
无论如何,试试上面的方法,我不确定哪一个会起作用。我认为您正在尝试的操作可能有点难以实现,如果它不起作用,那么很抱歉。希望它会:)您可以拥有一个函数对象并动态获取键值以使用特定函数
widgets = {
widget1 : function(value){return value;},
widget2 : function(value){return value+1},
widget3 : function(value){return value+2}
}; //you can have your list of functions say widgets1,2,3....
for(var k in widgets ){
console.log(widgets[k](1));
} //to get the function name you can use the key name in the object
榜样
如果知道该键,也可以调用该函数
widgets['widget2'](10); //to directly call the function if you know the key
要动态添加更多小部件,请使用
function add_widget(name,widgetFunction){ //function to add widget
widgets[name]=widgetFunction;
}
add_widget("widget4",function(value){return value+10;}); //adds a new widget to the widgets list
我找到了这个解决方案: 之前:
var tmp = $("#elem").widget1();
myarray[i] = tmp;
现在:
var tmp = $("#elem").widget1();
myarray[i] = tmp.data(ui-widget1);
通过这种方式,可以直接调用该方法:
myarray[x].doSomething();
你觉得怎么样?这是一个有效的解决方案吗 多谢大家
myarray[x].doSomething();