2013-03-07 195 views
4

我有一個numberfield輸入,當用戶點擊回車鍵時,我想失去焦點。使ExtJS輸入字段失去焦點

下面是當前的配置:

{ 
    xtype: 'numberfield', 
    minValue: 0, 
    maxValue: 99999, 
    hideTrigger: true, 
    keyNavEnabled: false, 
    mouseWheelEnabled: false, 
    enableKeyEvents: true, 

    listeners: { 
    specialkey: function(f, e) { 
     if (e.getKey() == e.ENTER) 
     f.blur(); 
    } 
    } 
} 

specialkey處理工作,要求blur()如預期,但唯一的結果是,插入符從輸入消失(表示DOM文本輸入元素已經模糊) 。該領域仍然有所有的x-form-focus等CSS類,並檢查該對象顯示私人hasFocus屬性仍然如此。

有什麼建議嗎?

我曾嘗試致電blur()後致電f.onBlur(),但沒有任何區別。

(順便說一句領域並不因此沒有表單提交屬於一種形式。)

+0

什麼nextfld.focus?即使它的父容器... – VoidMain 2013-03-07 15:26:15

+0

@VoidMain - 歡呼聲,但調用模糊相同的結果() – 2013-03-07 15:35:26

+0

如果你調用'f.up()。focus();'它不會使'f'失去它的焦點類? – VoidMain 2013-03-07 15:43:49

回答

3

的修復。該問題是由Ext.form.field.Trigger類中的一個奇怪行爲引起的,當調用常規'blur()'函數時,它們不觸發'triggerBlur()'。很有意思:

listeners: { 
    specialkey: function(f, e) { 
     if (e.getKey() == e.ENTER) 
     { 
      f.triggerBlur(); 
      f.blur(); 
     } 
    } 
} 
+0

謝謝!它當然有效,但考慮到triggerBlur是私有的,它看起來像是一個extjs錯誤,我將把它傳遞給ExtJS支持。 – 2013-03-08 14:49:12

+0

順便說一下,這樣可以通過在代碼中放入triggerBlur()來解決你的問題 – Reimius 2013-03-08 14:49:52

+0

是的,這確實是一個bug,但是這個 – Reimius 2013-03-08 14:50:15

0

這個工作對我來說:

specialkey: function(field,events) { 
    if (events.getKey() == events.ENTER) { 
     var nextfld = field.nextSibling(); 
     nextfld.focus(true,100); 
    } 
} 

specialkey - 就像文本框,textare,等的DateField組件的聽衆,

events.getKey - 獲取用戶鍵盤輸入

events.ENTER - 我使用這個功能會在鍵盤上的「ENTER」時觸發

field.nextSibling - 場指的是當前組件和組件的nextSibling屬性來告訴誰將會是下一個組件

最後是把重點放在下一個組件有關重點另一個組件

+0

你可以[編輯]解釋這段代碼的工作原理嗎? – durron597 2015-09-03 03:34:42

+0

完成編輯durron597現在希望它更清楚 – 2015-09-04 06:36:18