2013-02-27 1 views
1

В нашем приложении используется ExtJs, а в версии 4.1.3 в IE показано странное поведение.Почему идентификатор текстового поля конфликтует с слушателями в IE в ExtJs 4.1.3?

Проблема заключается в том, что если мы откроем окно с формой с несколькими текстовыми полями/комбо, и если мы снова откроем это окно после его закрытия один раз, то слушатели фокуса/размытия, применяемые к текстовому полю/комбо, перестанут работать.

Ниже приводится тестовый пример для выпуска:

Ext.onReady(function(){    
    function getForm(){ 
     var form = { 
      xtype:'form', 
      width:550, 
      items:[ 
       { 
        xtype:'textfield', 
        flex:1, 
        fieldLabel:'test1', 
        id:'disabledFieldId', 
        itemId:'disabledFieldId', 
        listeners:{ 
         focus:function(){ 
          console.log('focus first field'); 
         }, 
         blur:function(){ 
          console.log('blur first field'); 
         }, 
         change:function(){ 
          console.log('change first field'); 
         } 
        } 
       }, 
       { 
        xtype:'textfield', 
        flex:1, 
        fieldLabel:'test2' 
       } 
      ] 
     }; 
     return form; 
    } 
    Ext.create('Ext.Button', { 
     text: 'Open Window', 
     renderTo: Ext.getBody(), 
     handler: function() { 
      var win  =  Ext.create('Ext.window.Window',{ 
       modal:true, 
       items:[ 
        getForm() 
       ], 
       width:550, 
       height:200 
      }); 
      win.show(); 
     } 
    }); 
}); 

В приведенном выше тестовом примере, этот вопрос можно проверить с помощью следующих шагов:

  1. Загрузите страницу в IE и Нажмите кнопку «Открыть окно», чтобы открыть окно.

  2. Нажмите в первом текстовом поле, чтобы сфокусироваться на нем, это напечатает статут - «сначала сфокусируйтесь поле»- в консоли

  3. Теперь закройте это окно, а затем снова откройте его с помощью кнопки

  4. Нажмите в первом текстовом поле - теперь, ничего не будет выведено на консоль - фокус событие не будет срабатывать.

Я проверил и обнаружил, что события «фокус» и «размытие» не срабатывают, но событие «изменения» срабатывает каждый раз.

Если мы перезагрузим всю страницу, а затем откройте окно, то события снова начнут стрелять. Но в этом случае тоже, только на один раз.

Я обнаружил, что если 'id' прокомментирован из текстового поля, тогда все начинает работать нормально. Но это странно. Как «id» противоречит слушателям? Это ошибка?

Обратите внимание, что ошибки не выбрасываются. Кроме того, окно становится разрушенным, а элементы воссоздаются.

Я тоже тестировал это в Chrome и Firefox и обнаружил, что такое поведение происходит только в IE (в IE9 с IE и IE), с режимом документа и браузера, установленным в Стандартах).

Кроме того, когда я тестировал это с версиями до 4.1.1, я нашел, что все работает отлично с IE.

Любые мысли об этом?

Благодарим за помощь.

+0

Я не знаю почему, но могу дать вам исправить: установить свойство CloseAction для «скрыть», чтобы предотвратить DOM-уничтожение, а затем с кнопкой не создавать окно, но покажите его и создайте на странице-загрузке – Vogel612

+0

@ Vogel612: Спасибо, но сокрытие создаст много новых проблем в нашем приложении, поэтому не получится так. – netemp

+0

хорошо, это сработало с моей проблемой относительно этого, но я думаю, вы правы. нужно знать с нуля, какой механизм использовать. кстати, вы уверены, что не можете создать два окна, дважды нажав кнопку?как только идентификатор установлен многократно, слушатели id будут работать только при первом упоминании id, в отличие от классов – Vogel612

ответ

0

Это, наконец, принято как ошибка в версиях 4.1.2 и 4.1.3. Переопределение, которое может его решить, может быть checked on this link.

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