使用MouseOver事件控制dijit.MenuBar

时间:2011-10-21 14:20:05

标签: javascript widget dojo

在Dojo中,是否可以配置dijit.MenuBar以便菜单由MouseOver和MouseOut事件触发?实际上这种行为已经可用,但它通过初始或连续的鼠标点击事件打开或关闭 - 所以最初,MouseOver不会导致菜单弹出,但是如果用户点击菜单项,则菜单栏会响应MouseOver事件。连续单击鼠标将再次关闭此行为。

我想要的是基于MouseOver事件弹出的菜单和子菜单,不受点击事件的干扰。请查看http://dojotoolkit.org/reference-guide/dijit/MenuBar.html上的示例,了解我的意思。

2 个答案:

答案 0 :(得分:2)

你的问题引起了我的兴趣,足以制作working solution

我检查了dijit / Menu.js上的dijit._MenuBase源代码,显然有一个this.isActive标志在继续之前被检查过。所以我创建了一个子类,只是事先将此标志设置为true:

_ActivateOnMouseoverMixin = dojo.declare(null, {
    onItemHover: function(item){
        if(!this.isActive){
            this._markActive();
        }
        this.inherited(arguments);
    }
});

ActiveMenuBar = dojo.declare([dijit.MenuBar, _ActivateOnMouseoverMixin], {});

作为奖励,您还可以使用popupDelay变量修改延迟(我在示例中将其更改为更快)


我不知道是否还有另一种更理智的方式来做同样的事情。

答案 1 :(得分:0)

这是一个将'Hugomg'解决方案扩展到取消菜单和子菜单的示例:
[在此输入链接描述] [1]

[1]: http://jsfiddle.net/vg10c9md/2/
相关问题