私たちのアプリケーションは 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 でも問題なく動作することがわかりました。
これについて何か考えはありますか?
事前に助けてくれてありがとう。