Наше приложение использует ExtJs, и в версии 4.1.3 в IE наблюдается странное поведение.
Проблема в том, что если мы откроем окно, содержащее форму с несколькими текстовыми полями/комбинациями, и если мы снова откроем это окно после его закрытия один раз, то прослушиватели фокуса/размытия, примененные к текстовым полям/комбинациям, перестанут работать.
Ниже приведен тестовый пример для проблемы:
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();
}
});
});
В приведенном выше тестовом примере эту проблему можно проверить, выполнив следующие шаги:
Загрузите страницу в IE и нажмите кнопку «Открыть окно», чтобы открыть окно.
Щелкните в первом текстовом поле, чтобы сфокусироваться на нем, это напечатает статус - "фокусировать первое поле" - в консоли.
Теперь закройте это окно, а затем снова откройте его с помощью кнопки
Щелкните в первом текстовом поле — теперь ничего не будет выведено на консоль — событие фокуса вообще не сработает.
Я проверил и обнаружил, что события «фокус» и «размытие» не срабатывают, но событие «изменение» срабатывает каждый раз.
Если мы перезагрузим всю страницу, а затем откроем окно сейчас, то события снова начнут запускаться. Но и в этом случае только один раз.
Я обнаружил, что если 'id' прокомментирован из текстового поля, все начинает работать нормально. Но тогда это странно. Как id конфликтует со слушателями? Это ошибка?
Обратите внимание, что никаких ошибок не выдается. Кроме того, окно разрушается, а элементы воссоздаются.
Я также проверил это в Chrome и Firefox и обнаружил, что такое поведение происходит только в IE (проверено в IE9 с режимом документа и браузера, установленным на «Стандарты»).
Кроме того, когда я тестировал это с версиями до 4.1.1, я обнаружил, что с IE все работает нормально.
Есть мысли по этому поводу у кого-нибудь?
Спасибо за помощь заранее.