4

それが最も賢明なアイデアではないことはわかっていますが、それでもやらなければなりません。ユーザーは、TAB のように ENTER を使用したいと考えています。だから、私が思いついた最高のものはこれです:

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 とまったく同じようには機能しません。つまり、入力フィールドでは問題なく機能しますが、他のコントロールでは機能しません。低レベルの解決策があるかもしれません。何か案は?

4

4 に答える 4

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();
        }                   
    }
});
于 2012-07-27T17:46:56.937 に答える
1

Ext.form.field.Text および同様の xtypes にはenableKeyEvents、keypress/keydown/keyup イベントが発生する前に設定する必要がある追加の構成があります。config オプションはenableKeyEventsデフォルトで false であるため、true に設定する必要があります。

ExtJS API ドキュメント

于 2014-11-05T14:08:59.230 に答える
0

あなたはこれを試すことができます

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

これまで自分で実際に試したことはありません。

于 2012-07-27T06:06:13.747 に答える
0

免責事項:私はExtJの専門家ではありません。

そうは言っても、多分次のようなことを試してみてください。

if (e.getKey() === 13) {
    me.blur();
    return false;  // cancel key event to prevent the [Enter] behavior
}
于 2012-07-27T05:57:58.467 に答える