2013-02-27 31 views
1

我們的應用程序使用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(); 
     } 
    }); 
}); 

在上面的測試情況下,這個問題可以通過以下步驟進行檢查:

  1. 加載網頁在IE和點擊「打開窗口」按鈕打開窗口

  2. 單擊第一個文本框來關注它,這將打印一個語句 - 「首先關注焦點場」 - 在控制檯

  3. 現在再次從按鈕,在第一文本框關閉此窗口,然後打開它

  4. 點擊 - 現在,什麼都不會被打印到控制檯 - 焦點事件不會在所有火。

我已檢查並發現'焦點'和'模糊'事件不會觸發,但'更改'事件每次都會觸發。

如果我們重新加載整個頁面,然後打開窗口,那麼事件將再次開始觸發。但在這種情況下,也只有一次。

我發現如果'id'是從textfield註釋,那麼事情開始工作正常。但是這很奇怪。 'id'如何與聽衆衝突?這是一個錯誤?

請注意,沒有錯誤被拋出。此外,窗口正在被破壞,元素正在重新創建。

我在Chrome和Firefox中也測試了這一點,並發現這種行爲僅在IE中發生(在IE9中以文檔和瀏覽器模式設置爲標準進行檢查)。

另外,當我測試版本高達4.1.1,我發現事情與IE瀏覽器也能正常工作。

對這個人有什麼想法?

感謝您的幫助。

+0

我不知道爲什麼,但我可以給你一個修復:設置屬性CloseAction'隱藏',以防止DOM破壞然後用按鈕不創建窗口,但顯示並創建頁面加載 – Vogel612 2013-02-27 13:40:27

+0

@ Vogel612:謝謝但隱藏會在我們的應用程序中創建許多新問題,所以不能這樣。 – netemp 2013-02-27 13:42:46

+0

好吧,這與我的問題有關,但我想你是對的。需要從頭開始瞭解使用哪種機制。順便問一下,你確定你不能通過兩次點擊按鈕來創建兩個窗口?只要設置了id,監聽器的id將只能在第一次提到id時使用,與類 – Vogel612 2013-02-27 13:49:06

回答