Skip to content
Permalink
Browse files

Menu: Implement delaying of opening and closing submenus

  • Loading branch information
jzaefferer committed Mar 17, 2011
1 parent 2ddf83f commit a077047fb3d89acca276358be9a544d45fa58d32
Showing with 18 additions and 4 deletions.
  1. +18 −4 ui/jquery.ui.menu.js
@@ -17,6 +17,7 @@ var idIncrement = 0;

$.widget("ui.menu", {
defaultElement: "<ul>",
delay: 150,
options: {
position: {
my: "left top",
@@ -219,11 +220,13 @@ $.widget("ui.menu", {
// need to remove the attribute before adding it for the screenreader to pick up the change
// see http://groups.google.com/group/jquery-a11y/msg/929e0c1e8c5efc8f
this.element.removeAttr("aria-activedescendant").attr("aria-activedescendant", self.itemId)

self._close();

self.timer = setTimeout(function() {
self._close();
}, self.delay)
var nested = $(">ul", item);
if (nested.length && /^mouse/.test(event.type)) {
self._open(nested);
self._startOpening(nested);
}
this.activeMenu = item.parent();

@@ -235,6 +238,8 @@ $.widget("ui.menu", {
return;
}

clearTimeout(this.timer);

this.active.children( "a" ).removeClass( "ui-state-focus" );
// remove only generated id
$( "#" + this.menuId + "-activedescendant" ).removeAttr( "id" );
@@ -243,9 +248,18 @@ $.widget("ui.menu", {
this.active = null;
},

_startOpening: function(submenu) {
clearTimeout(this.timer);
var self = this;
self.timer = setTimeout(function() {
self._close();
self._open(submenu);
}, self.delay);
},

_open: function(submenu) {
this.element.find(".ui-menu").not(submenu.parents()).hide();

var position = $.extend({}, {
of: this.active
}, $.type(this.options.position) == "function"

0 comments on commit a077047

Please sign in to comment.
You can’t perform that action at this time.