0

通常,表单和弹出窗口在刚显示时不会设置焦点。显而易见的解决方案是在组件的创建完成事件中将焦点设置为第一个输入,这样 tab 和 space 等键盘快捷键开始工作。

问题是,创建完成不是灵丹妙药,有时元素此时无法聚焦,我不确定为什么会发生这种情况。

渲染事件将确保焦点,但它为了一个非常简单的目的而分派了太多。

在哪一点上,组件始终准备好成为焦点?

编辑:让我无法获得启动焦点的组件是 a TitleWindow,它可以以两种方式弹出,鼠标单击事件和键盘事件。当通过单击显示tite窗口时,第一个输入在创建完成事件中获得焦点,但是当通过键盘事件显示时,它不会...

现在我得到了它使用以下代码:

private function titlewindow_creationCompleteHandler(e:FlexEvent):void{
    callLater( setTextInputFocus);
}
private function setTextInputFocus():void{
    txtPregunta.setFocus();
}

但是怀疑显示的方式与此有关......因为,其他一些TitleWindow也以这种方式显示并且它们很好。

那会是什么?

4

1 回答 1

0

渲染事件将确保焦点,但它为了一个非常简单的目的而分派了太多。

如果这是真的,那么为什么不试试这个:

private function titlewindow_creationCompleteHandler(e:FlexEvent):void{
    var callback : Function = function(re : Event) : void {
        titlewindow.removeEventHandler(RenderEvent.orsomething, callback);
        setTextInputFocus();
    };

    titlewindow.addEventHandler(RenderEvent.orsomething, callback);
}

可能是一种 hack,因为它应该专注于 creationComplete,但它可能会起作用。

于 2013-04-14T22:02:46.877 回答