2015-05-22 3 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 пользователя на Сенча форуме - подумал, что это должно было быть на 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); 
    } 
}); 
0

В отношении той же ссылке, https://www.sencha.com/forum/showthread.php?301116-Submenus-disappear-in-Chrome-43-beta, вот более общий характер, не- конкретные исправления благодаря посту # 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

Смежные вопросы