这是我的代码

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无效,直到再次调用它。

为了注入它,可以尝试触发组件的重新渲染,或者可以复制TextFieldinitEvent的相关部分的行为。但是似乎没有官方的方法。

10-07 15:45