2012-07-27 109 views
4

我知道這不是最聰明的想法,但我仍然必須這樣做。 我們的用戶希望使用像TAB一樣的ENTER。 所以,我想出了最好的是這樣的:ExtJs在ENTER按鍵上模擬TAB

Ext.override(Ext.form.field.Base, { 
      initComponent: function() { 
       this.callParent(arguments); 

       this.on('afterrender', function() { 
        var me=this; 
        this.getEl().on('keypress',function (e){ 
         if(e.getKey() == 13) { 
          me.nextNode().focus(); 
         } 
        }); 
       }); 
      } 
     }); 

但它仍然無法正常工作完全相同的方式作爲TAB相同。 我的意思是,它適用於輸入字段,但不適用於其他控件。 可能會有一些低級解決方案。 任何想法?

回答

0

聲明:我不是ExtJs的專家。

這就是說,也許你可以試試:

if (e.getKey() === 13) { 
    me.blur(); 
    return false; // cancel key event to prevent the [Enter] behavior 
} 
0

你可以試試這個

if (e.getKey() === 13) { 
    e.keyCode = Ext.EventObject.TAB 
    this.fireEvent(e, {// any additional options 
    }); 
} 

還沒有真正嘗試過這個不斷自我。

+0

不,這是行不通 – mik 2012-07-27 06:31:34

3

在過去,我已經把它貼聽者的文件,像這樣:

Ext.getDoc().on('keypress', function(event, target) { 

    // get the form field component 
    var targetEl = Ext.get(target.id), 
     fieldEl = targetEl.up('[class*=x-field]') || {}, 
     field = Ext.getCmp(fieldEl.id); 

    if (
     // the ENTER key was pressed... 
     event.ENTER == event.getKey() && 

     // from a form field... 
     field && 

     // which has valid data. 
     field.isValid() 

     ) { 

     // get the next form field 
     var next = field.next('[isFormField]'); 

     // focus the next field if it exists 
     if (next) { 
      event.stopEvent(); 
      next.focus(); 
     }     
    } 
}); 
+0

這是什麼版本的內線嗎?我想,不是ExtJS 4.x – mik 2012-08-01 07:06:19

+0

@mik這在4.1.0中適用於我。我意識到,雖然我沒有將它用於表單字段,但表單字段事件並不針對該組件,因此它們不會起作用。我編輯了我的答案,因此它特別適用於表單域。 – Geronimo 2012-08-01 17:11:24

1

對於Ext.form.field.Text和類似xtypes有一個額外的配置enableKeyEvents需要設置keypress/keydown/keyup事件觸發之前。 enableKeyEvents配置選項需要設置爲true,因爲它默認爲false。

ExtJS API Doc