Extjs 子菜单在 Chrome 43 上消失
Posted
技术标签:
【中文标题】Extjs 子菜单在 Chrome 43 上消失【英文标题】:Extjs Submenus disappear on Chrome 43 【发布时间】:2015-05-22 14:31:50 【问题描述】:如何修复 Chrome 43 中子菜单消失的问题?
使用 Extjs 4。
这适用于以前版本的 Chrome。
【问题讨论】:
我今天在 Chrome Canary (45) 中对此进行了测试,它再次运行良好。因此,您可能需要使用未来版本的 Chrome 重新评估您的解决方法。 【参考方案1】:需要添加此覆盖以解决此问题。
https://www.sencha.com/forum/showthread.php?301116-Submenus-disappear-in-Chrome-43-beta
(感谢 Sencha 论坛上的 festr 用户 - 认为这也需要在 SO 上)
// fix hide submenu (in chrome 43)
Ext.override(Ext.menu.Menu,
onMouseLeave: function(e)
var me = this;
// BEGIN FIX
var visibleSubmenu = false;
me.items.each(function(item)
if(item.menu && item.menu.isVisible())
visibleSubmenu = true;
)
if(visibleSubmenu)
//console.log('apply fix hide submenu');
return;
// END FIX
me.deactivateActiveItem();
if (me.disabled)
return;
me.fireEvent('mouseleave', me, e);
);
【讨论】:
【参考方案2】:关于同一个链接,https://www.sencha.com/forum/showthread.php?301116-Submenus-disappear-in-Chrome-43-beta,感谢 siq 发布的 #27,这里有一个更通用、非特定的修复:
Ext.apply(Ext.EventManager,
normalizeEvent: function(eventName, fn)
//start fix
var EventManager = Ext.EventManager,
supports = Ext.supports;
if(Ext.chromeVersion >=43 && eventName == 'mouseover')
var origFn = fn;
fn = function()
var me = this,
args = arguments;
setTimeout(
function()
origFn.apply(me || Ext.global, args);
,
0);
;
//end fix
if (EventManager.mouseEnterLeaveRe.test(eventName) && !supports.MouseEnterLeave)
if (fn)
fn = Ext.Function.createInterceptor(fn, EventManager.contains);
eventName = eventName == 'mouseenter' ? 'mouseover' : 'mouseout';
else if (eventName == 'mousewheel' && !supports.MouseWheel && !Ext.isOpera)
eventName = 'DOMMouseScroll';
return
eventName: eventName,
fn: fn
;
);
我已经对此进行了测试,我可以验证它是否有效(v. 4.1.2)。
【讨论】:
我很抱歉 - 我应该注意到我将此修复应用于版本 4.1.2。帖子已更新。感谢您指出这一点。以上是关于Extjs 子菜单在 Chrome 43 上消失的主要内容,如果未能解决你的问题,请参考以下文章