2011-10-13 65 views
4

我有一個模糊事件的簡單組合框。模糊事件目前有一個要求測試目的的警報。ExtJS 4 - 組合框模糊事件被激發兩次

的問題是,這種模糊的事件會得到如下觸發了兩次:

  1. 如果光標在此組合框和用戶按下「Tab」鍵,由於該組合框失去焦點 - >模糊事件被解僱。

  2. 一旦組合框丟失焦點,如果用戶在屏幕上的任意位置單擊鼠標,則模糊事件會再次被觸發。

有沒有反正這個模糊事件可以只觸發一次?

下面是完整的代碼我使用:

<html> 
    <head> 
     <title>Test Page</title> 
     <link rel="stylesheet" type="text/css" href="ext-4.0.2a/resources/css/ext-all.css"> 
     <script type="text/javascript" src="ext-4.0.2a/bootstrap.js"></script> 

     <script type='text/javascript'> 

      Ext.onReady(function(){ 

       Ext.define("Post", { 
        extend: 'Ext.data.Model', 
        fields: [ 
         {name: 'id', mapping: 'post_id'}, 
         {name: 'title', mapping: 'topic_title'}, 
         {name: 'topicId', mapping: 'topic_id'}, 
         {name: 'author', mapping: 'author'}, 
         {name: 'lastPost', mapping: 'post_time', type: 'date', dateFormat: 'timestamp'}, 
         {name: 'excerpt', mapping: 'post_text'} 
        ] 
       }); 

       ds = Ext.create('Ext.data.Store', { 
        pageSize: 10, 
        proxy: { 
         type: 'jsonp', 
         url : 'http://www.sencha.com/forum/topics-remote.php', 
         reader: { 
          type: 'json', 
          root: 'topics', 
          totalProperty: 'totalCount' 
         } 
        }, 
        model: 'Post' 
       }); 

       panel = Ext.create('Ext.panel.Panel', { 
        renderTo: Ext.getBody(), 
        title: 'Search the Ext Forums', 
        width: 600, 
        bodyPadding: 10, 
        layout: 'anchor', 
        items: [{ 
         xtype: 'combo', 
         store: ds, 
         displayField: 'title', 
         fieldLabel:'Blur Test', 
         listeners:{ 
          blur:function(){ 
           alert('1'); 
          } 
         } 
        }, { 
         xtype: 'component', 
         style: 'margin-top:10px', 
         html: 'Live search requires a minimum of 4 characters.' 
        }] 
       }); 
      }); 
     </script> 
    </head> 
    <body> 

    </body> 
</html> 

感謝提前的幫助。 PS:我使用ExtJS版本4.0.2a並在Firefox,IE9和IE8中檢查了此行爲。他們都是兩次發射事件。但是,當在Chrome中選中時,該事件只會被觸發一次。

+1

http://jsfiddle.net/ZkqP8/我似乎無法複製該問題。您使用的是什麼瀏覽器和ExtJS 4版本? – rwilliams

+0

感謝職位RWilliams。我用版本和瀏覽器詳細信息更新了我的問題。另外,我查看了你和你分享的小提琴鏈接,發現模糊事件甚至沒有被解僱。你的情況只發一次嗎?對我來說,它在小提琴環節根本沒有開火。 – netemp

+0

我知道你使用的ExtJS版本4,但它是4.0.2,4.0.2a,4.0.6等etc – rwilliams

回答

0

一(很可怕)的選擇是創建一個變量來跟蹤你的模糊數:

var AlreadyBlurred = false; //Obviously you want to put this somewhere NOT global

接下來,您可以在您的listeners對象做到這一點:

listeners: { 
    blur: function(){ 
     if(!AlreadyBlurred) 
     { 
      // Do your code here 
     } 
     AlreadyBlurred = !AlreadyBlurred; 
    } 
} 

同樣,這是一個非常可怕的想法,因爲它可能會掩蓋您的代碼或Ext本身的問題。升級到4.0.7似乎沒有幫助(jsfiddle上的最新版本顯示這仍然會發生)。出於好奇,爲什麼要開始模糊事件?您可以在更改時選擇,還是選擇所需的結果?