在刚刚创建的窗口中为文本输入设置焦点

Posted

技术标签:

【中文标题】在刚刚创建的窗口中为文本输入设置焦点【英文标题】:Set focus for text input in just created window 【发布时间】:2012-06-19 00:19:22 【问题描述】:

我有一个简单的窗口:

   this.window = Ext.widget('window', 
            title: 'Find',
            closeAction: 'hide',
            width: 300,
            layout: 'fit',
            items: form
        );

里面有简单的形式

var form = Ext.widget('form', 
    layout: 
        type: 'vbox',
        align: 'stretch'
    ,
    border: false,
    bodyPadding: 10,

    items: [
        this.findInput,
    ]
);

只有一项

    this.findInput = Ext.widget('textfield', 
        name: 'find'
    );

问题是:如何在窗口显示后立即设置焦点?我试图在几乎每个窗口事件处理程序中调用this.findInput.focus() 方法,但没有成功。

似乎在 DOM 完全创建所有元素之前,甚至 afterrender 都被同步调用了。

我错过了什么?我应该绑定什么事件来渲染所有元素并能够接受焦点?

PS:如果我在 10 毫秒这样的小间隔后调用相同的 .focus() - 我会集中注意力,但这不是解决方案

【问题讨论】:

另见Set focus on Extjs textfield 【参考方案1】:

查看activeItem 属性 - http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.Panel-cfg-activeItem

或者你也可以使用defaultFocus:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.window.Window-cfg-defaultFocus

【讨论】:

不幸的是,它不适用于vbox 布局。至少在将activeItem: 0 添加到窗体和窗口之后 - 没有任何改变。而在 extjs 源代码中,我只能在 card 布局中看到它 试试这个:docs.sencha.com/ext-js/4-0/#!/api/… 是的,defaultFocus 就是我要找的。请把它作为答案

以上是关于在刚刚创建的窗口中为文本输入设置焦点的主要内容,如果未能解决你的问题,请参考以下文章

如何设置网页的默认输入焦点?

Qt中的键盘事件,以及焦点的设置(比较详细)

如何在 iOS 中为文本字段设置数字范围?

将焦点设置在 Popup 的 textInput 控件上

刚刚填写的文本框失去焦点后如何调用事件?

即使设置了焦点也无法在文本框中输入