2012-02-04 1 views
0

Мне интересно, есть ли эффективный способ определить, теряет ли плавающее окно фокус или нет. У меня есть плавающее окно для временных входов пользователя, то, что я хочу сделать, автоматически скрывает это окно, если пользователь забыл скрыть его после ввода операции (например, щелчки в другом месте). Я попытался использовать событие размытия на элементе окна, но ничего не произошло. рабочая демонстрация: demoВсплывающее детектирование фокуса с плавающей точкой ExtJS

спасибо за любую идею!

ответ

0

Перед тем, как вы обнаружите, что окно размыто или нет, вам потребуется какое-то действие, чтобы размыть окно в первую очередь. Вы упомянули, что хотите, чтобы окно размылось, если пользователь «щелкает в другом месте»; Вы можете сделать это, добавив слушатель в mainPanel:

var mainPanel = new Ext.Panel({ //define a main non-floating panel 
    title: 'main', 
    id: 'mainPanel', 
    width: 400, 
    height: 400, 
    listeners: { 
     afterrender: function(self) { 
      self.body.on('click', function() { 
       alert('clicked') 
      }); 
     } 
    } 

}); 

После того, как тело панель была нажата, вы можете размыть floatWin так событий он прослушивает на самом деле огонь.

+0

спасибо за ваш ответ .. однако, это работает только для тела mainPanel в. в моем реальном приложении есть несколько других контейнеров, включая некоторые другие плавающие, я думаю, что не рекомендуется регистрировать событие «click» для каждого из них. – Simon

4

Это может быть достигнуто добавлением событие размытия окна внутр элемента, ниже приведен пример кода

Ext.applyIf(me, { 
     items: [ 
      { 
       xtype: 'button', 
       text: 'Done', 
       listeners: { 
        click: { 
         fn: me.onDoneButtonClick, 
         scope: me 
        } 
       } 
      } 
     ], 
     listeners: { 
      el: { 
       blur: { 
        fn: me.onWindowLoseFocus, 
        scope:me 
       } 
      }    
     } 
    }); 
Смежные вопросы