我正在创建一个jQuery菜单栏,一切看起来都很好但是当我将鼠标悬停在顶级菜单项上时,我得到了一个奇怪的效果,该菜单项有一个子菜单,其中第一个项目也有一个子菜单。如果我鼠标进出(在视图菜单项上左右移动)20次,我将开始看到视图>编码子子菜单越来越向右移动。
我可以使用修改版的菜单栏演示示例重新创建此问题。我在firefox 20.0.1上。
见这里:http://jsfiddle.net/Njjgm/
我认为它是找到子菜单的右边缘,然后将同一子菜单的新左边缘设置到该位置...所以如果我减慢开口或修复定位数学然后我不应该有那个错误。
我正在查看jquery.ui.menubar.js文件,看看我是否可以调整setTimeouts,或修复子菜单定位但没有运气。
我正在看这个(来自jquery.ui.menubar.js第262行):
__applyMouseBehaviorForSubmenuHavingMenuItem: function (input, menubar) {
var menu = input.next( menubar.options.menuElement ),
mouseBehaviorCallback = function( event ) {
// ignore triggered focus event
if ( event.type === "focus" && !event.originalEvent ) {
return;
}
if (event.type === "mouseenter") {
this.element.find(":focus").focusout();
if (this.stashedOpenMenu) {
this._open( event, menu);
}
this.stashedOpenMenu = undefined;
}
if ((this.open && event.type === "mouseenter")
|| this.options.autoExpand) {
if (this.options.autoExpand) {
clearTimeout( this.closeTimer );
}
this._open( event, menu );
}
};
此时:(来自jquery.ui.menubar.js第68行)
focusin: function( event ) {
clearTimeout( menubar.closeTimer );
},
focusout: function( event ) {
menubar.closeTimer = setTimeout (function() {
menubar._close( event );
}, 150 );
},
"mouseleave .ui-menubar-item": function( event ) {
if ( menubar.options.autoExpand ) {
menubar.closeTimer = setTimeout( function() {
menubar._close( event );
}, 150 );
}
},
"mouseenter .ui-menubar-item": function( event ) {
clearTimeout( menubar.closeTimer );
}
有没有人在jquery ui菜单栏体验中看到并修复过这个问题?有没有人知道setTimeout的修复? HoverIntent似乎使用与菜单栏相同的set / clearTimeout技术,所以我不想从菜单栏中删除所有逻辑以添加它。任何建议都欢迎。感谢。
答案 0 :(得分:0)
我找到了解决这个问题的方法,虽然我没有修复错误的定位(但我想我找到了它可以修复的地方)。
默认情况下,代码会在打开的菜单中选择第一个列表元素,如果该元素也有菜单,则该菜单也会打开。我拿出了将焦点放在第一个子元素上的代码(为什么它甚至需要这样做?)
来自jquery.ui.menubar.js第451行
this.active = menu
.show()
.position($.extend({
of: button
}, this.options.position));
//.removeAttr("aria-hidden")
//.attr("aria-expanded", "true")
//.menu("focus", event, menu.children(".ui-menu-item").first() )
// TODO need a comment here why both events are triggered
//.focus()
//.focusin();
和Presto-Changeo!没有更多的幻影下拉菜单...我本可以试图找出menu.position
但这对我有用。