这是我的代码
myText.enableKeyEvents = true; // **
myText.on('keyup', function(t){ console.log(t.getValue()); });
它不起作用,我认为它可能具有某些invoke方法。
有人有主意吗?
完整代码
// function
var txfJump = function(txf){
var next = txf.nextSibling();
if(next.xtype == 'textfield'){
txf.enableKeyEvents = true;
txf.on('keyup', function(t, e){
if(t.getValue().length == t.maxLength){
next.focus();
}
});
txfJump(next);
}
};
// form
var p = new Ext.Panel({
title : 'test panel',
width : 400,
defaults: {
xtype : 'textfield',
},
items : [
{ ref : 'one', maxLength : 5 },
{ ref : 'two', maxLength : 5 },
{ ref : 'three',maxLength : 5 },
{
xtype : 'button',
text : 'SAMPLE'
},
{ ref : 'four', maxLength : 5 },
],
renderTo: Ext.getBody()
});
Ext.onReady(function(){
txfJump(p.one);
});
最佳答案
没有hacky技巧是不可能的。阅读TextField
的源代码后,我发现有一个私有方法initEvents
,当且仅当设置了enableKeyEvents
时,该方法才为html元素设置回调。因此,在调用enableKeyEvents
之后更改initEvents
无效,直到再次调用它。
为了注入它,可以尝试触发组件的重新渲染,或者可以复制TextField
的initEvent
的相关部分的行为。但是似乎没有官方的方法。