2015-05-22 88 views
4

如何修復子菜單在Chrome 43中消失?Extjs子菜單消失在Chrome 43上

使用ExtJS的4

這是在Chrome的早期版本中工作。

+0

我今天在Chrome Canary(45)測試了它,它再次正常工作。因此,您可能需要使用未來版本的Chrome重新評估您的解決方法。 – matt

回答

9

需要添加此覆蓋以修復此問題。

https://www.sencha.com/forum/showthread.php?301116-Submenus-disappear-in-Chrome-43-beta

(感謝festr上煎茶論壇的用戶 - 認爲這需要上也是如此)

// 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); 
    } 
}); 
0

在關於同一鏈接,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)。

+0

這不適用於4.0.7 –

+0

我的歉意 - 我應該注意到,我將此修復程序應用於版本4.1.2。該帖子已更新。感謝您指出了這一點。 – sutt0n