【发布时间】:2015-10-19 12:31:59
【问题描述】:
我需要使用jQuery UI Menu 做一个多下拉菜单。在此之前,我们使用了jQuery UI Selectmenu。
Selectmenu 基于select,其中可以使用val() 方法来获取/设置选择值。现在菜单是基于 ul/li 的,所以我没有这个选项。
所以我需要以某种方式模仿以下行为:
someMenu.menu();
//....
someMenu.val(someValue);
someMenu.menu("refresh");
我尝试扩展菜单小部件并添加一些方法,例如:
$.widget("market.multiDropdownMenu",$.ui.menu, {
//....
getSelectedItem: function () {
return this.active;
},
setSelectedItem: function(elem){
var elem = this.element.find(elem).first();
if (elem) {
this.active = elem;
this.focus('focus', elem);
this.element.find('.ui-menu-item.selected').removeClass('selected');
this.getSelectedItem().addClass('selected');
}
},
//....
}
然后像这样使用它:
// for getter
var elem = someMenu.multiDropdownMenu("getSelectedItem"); // getting null
// and for setter
var newElem = ...
someMenu.multiDropdownMenu("setSelectedItem", newElem);
someMenu.multiDropdownMenu("refresh");
但是在设置了一些值并尝试在下次 active 字段为 null 时将其取回。
我也尝试使用elem.trigger('click'); 代替焦点事件,但没有成功。
【问题讨论】:
-
不要修改小部件,而是考虑专门为支持嵌套级别而设计的替代方法:users.tpg.com.au/j_birch/plugins/superfish
标签: javascript jquery jquery-ui jquery-ui-selectmenu jquery-ui-menu