我知道这不是最明智的想法,但我仍然必须这样做。 我们的用户希望像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完全不同。 我的意思是,它适用于输入字段,但不适用于其他控件。 可能有一些低级别的解决方案。 有什么想法吗?
答案 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 enableKeyEvents
。
enableKeyEvents
配置选项需要设置为true,因为它默认为false。
答案 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
});
}
我自己没有真正尝试过这个。