我們的應用程序使用ExtJs和版本4.1.3奇怪的行爲正在IE中顯示。爲什麼在ExtJs 4.1.3中,textfield id與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'是從textfield註釋,那麼事情開始工作正常。但是這很奇怪。 'id'如何與聽衆衝突?這是一個錯誤?
請注意,沒有錯誤被拋出。此外,窗口正在被破壞,元素正在重新創建。
我在Chrome和Firefox中也測試了這一點,並發現這種行爲僅在IE中發生(在IE9中以文檔和瀏覽器模式設置爲標準進行檢查)。
另外,當我測試版本高達4.1.1,我發現事情與IE瀏覽器也能正常工作。
對這個人有什麼想法?
感謝您的幫助。
我不知道爲什麼,但我可以給你一個修復:設置屬性CloseAction'隱藏',以防止DOM破壞然後用按鈕不創建窗口,但顯示並創建頁面加載 – Vogel612 2013-02-27 13:40:27
@ Vogel612:謝謝但隱藏會在我們的應用程序中創建許多新問題,所以不能這樣。 – netemp 2013-02-27 13:42:46
好吧,這與我的問題有關,但我想你是對的。需要從頭開始瞭解使用哪種機制。順便問一下,你確定你不能通過兩次點擊按鈕來創建兩個窗口?只要設置了id,監聽器的id將只能在第一次提到id時使用,與類 – Vogel612 2013-02-27 13:49:06