【问题标题】:jQuery UI Menu get/set for active ui-menu-itemjQuery UI Menu 获取/设置活动的 ui-menu-item
【发布时间】: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'); 代替焦点事件,但没有成功。

【问题讨论】:

标签: javascript jquery jquery-ui jquery-ui-selectmenu jquery-ui-menu


【解决方案1】:

我并不完全清楚你想在这里做什么,但你可以做的可能是为菜单中选择的任何元素设置一个类。然后,如果您想知道哪个被选中,您只需使用该类。

设置选择:

$( "#menu" ).menu({
    select: function(event, ui) {
        $('.selectedItem').removeClass('selectedItem');
        $(event.currentTarget).addClass('selectedItem');

    }
});

获取选定值:

$('.selectedItem').text();

Fiddle

【讨论】:

  • 是的,event.currentTarget 和附加市场 css 类的选项适合我。谢谢你帮助我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 2015-11-13
  • 2022-12-02
  • 2013-02-20
  • 1970-01-01
相关资源
最近更新 更多