Мне нужно сделать несколько выпадающих меню, используя меню пользовательского интерфейса jQuery. До этого мы использовали jQuery UI 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');
вместо события focus.