javascript - jQuery 用户界面 : How to check whether another instance of widget is opened?

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

我通过扩展 jQuery UI 创建了自定义小部件 Menu 。基本上需要与 <select> 一起工作HTML 元素如 ui.selectmenu确实如此,但在子菜单中显示选项:

$.widget("market.myMenu",$.ui.menu, {
// ...
_attachEvents: function(){
    var self = this;
    // menu is initially hidden
    self.menuWrapper.hide();
    self.button.on('click', function(){
        if (self.originalSelect.is(':disabled')) {
            self.disable();
        } else {                
            self.menuWrapper.toggle();
        }
        return false;
    });

    $(document).on('click', function(){
        self.menuWrapper.hide();
    });             
},
//...
  }
}

当这个小部件附加到多个元素时,就会出现问题,例如:

someSelect.myMenu();
//...
anotherSelect.myMenu();

问题已在标题中列出,您可以在 _attachEvents() 中看到它方法:

  1. 当用户点击someSelect时它按预期打开
  2. 然后用户点击 anotherSelect它还会打开
  3. someSelect步骤后 2应该关闭,但事实并非如此。

那么如何检查这种情况并解决这个问题?

编辑:

  1. this.originalSelect<select> HTML 元素
  2. this.button是div元素。显示所选选项文本(基本上与 ui.selectmenu 相同);

最佳答案

您可以使用类来跟踪菜单的状态,并使用它来定位打开的实例。例如这样的事情:

_attachEvents: function(){
    var self = this;
    // menu is initially hidden
    self.menuWrapper.hide();
    self.button.on('click', function(){
        if (self.originalSelect.is(':disabled')) {
            self.disable();
        } else {
            // before you open a menu, you close the opened ones
            $('menu-opened').each(function(){
                $(this).myMenu('instance').hideWrapper();
            });
            self.menuWrapper.toggleClass('menu-opened');                
            self.menuWrapper.toggle();
        }
        return false;
    });

    $(document).on('click', function(){
        self.menuWrapper.hide();
    });             
},

hideWrapper: function(){
    var self = this;
    self.menuWrapper.hide();
    self.menuWrapper.removeClass('menu-opened');
}

关于javascript - jQuery 用户界面 : How to check whether another instance of widget is opened?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33304392/

相关文章:

javascript - div 跟随光标的困难

jquery - 如何将整个图像放入具有他尺寸的div

javascript - jQuery UI 可按选择选项排序

javascript - PCFG(NLP)中的内外算法

javascript - 我在这个 javascript 循环操作中做错了什么?

javascript - 从 DOM 中分离内容

当助手设置为克隆时,jQuery ui 拖放在 Chrome 中无法正常工作

javascript - 当 div 大小改变时,可拖动 div 相对于光标居中

javascript - 创建对象时函数关键字是可选的吗?

javascript - 继承属性(property)检查