ExtJs在ENTER键上模拟TAB

时间:2012-07-27 05:52:21

标签: javascript extjs extjs4

我知道这不是最明智的想法,但我仍然必须这样做。 我们的用户希望像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 个答案:

答案 0 :(得分: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();
        }                   
    }
});

答案 1 :(得分:1)

对于Ext.form.field.Text和类似的xtypes,需要在keypress / keydown / keyup事件触发之前设置一个额外的config enableKeyEventsenableKeyEvents配置选项需要设置为true,因为它默认为false。

ExtJS API Doc

答案 2 :(得分:0)

免责声明:我不是ExtJs的专家。

那说,也许尝试类似的事情:

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

答案 3 :(得分:0)

你可以试试这个

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

我自己没有真正尝试过这个。