2015年11月10日 星期二

for Extjs4 ,如何在文字欄位離焦前做點事--找出被誰橫刀「奪焦」去了

找出同一個頁面中,是讓什麼其他元件取走focus
(這種需求多半是在輸入時要用輔助單元做輸入,而動作完之後,仍要再度取回焦點,)
我想,你一定想當然爾是在blur事件時做善後的,
example:
==================================
  { xtype:'textfield',
     ...
     ...
     listeners:{
          ...
          ...
          blur: function (textfield, e, o) {
               //test if the target is helper control,and take back focus latter.
             if(e.getTarget().id!=.......){
                //if target id is not help control,forget it
             }else{
                 //if target id is helper control, set the flag, wait for it
             }
 
          }
     
    }
   }
=====================================
但,不幸的,上例所取得的id,永遠是這個textfield.inputEl.dom.id,而不是取得焦點的extjs control id
,怎麼辦?
事實上,上面的例子,只要加個defer的動作,就差不多了,如:
==============================
   Ext.Function.defer(function () {
        if(e.getTarget().id!=.......){
        }
  },500);
=============================
是的,既言之,差不多,就是還是會有漏勾的地方,沒錯,在Chrome是很正常,但在IE & 火狐就掛了
就這樣放棄了嗎?
   那就改一下xtype吧,用別的文字方塊類別,,把上述的程式碼改一下
==================================
  { xtype:'numberfield',
     ...
     ...
     listeners:{
          ...
          ...
          blur: function (textfield, e, o) {
               //test if the target is helper control,and take back focus latter.
             if(e.getTarget().id!=.......){
                //if target id is not help control,forget it
             }else{
                 //if target id is helper control, set the flag, wait for it
             }
 
          }
     
    }
   }
========不要問我為什麼,反正我就是試出了===================
這樣在firefox & IE就正常了
以上,大家加油囉


沒有留言:

張貼留言