当应用程序启动时有两种状态时将焦点设置在 TextField 上

Posted

技术标签:

【中文标题】当应用程序启动时有两种状态时将焦点设置在 TextField 上【英文标题】:Setting focus on a TextField when application starts when there are two states 【发布时间】:2012-12-07 03:31:56 【问题描述】:

我有下一个应用程序标题:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" creationPolicy="all" enterState="focusManager.setFocus(employeeIDTextInput);">

public function init():void 
    focusManager.showFocusIndicator = true;
    focusManager.showFocus();
    focusManager.setFocus(theTextInput);

TextInput 处于默认状态。但是当应用程序启动时,TextField 被聚焦(TextField 周围有一个蓝色矩形),但光标不在 TextField 内。但是在下一个状态中,我有另一个文本输入,当您在状态之间切换时,两个文本输入都按照您的预期正确聚焦,并且光标正确出现在每个文本输入中。

<mx:State name="secondState" enterState="focusManager.setFocus(anotherTextInput)">

我的问题是,为什么当应用程序启动时,光标不在 init() 函数中的 TextInput 内?

感谢您的回答

【问题讨论】:

您是否尝试在 applicationComplete 而不是 creationComplete 上运行您的函数? 当您的浏览器加载 SWF 时,应通过 javascript(或手动单击它)为 SWF 提供焦点。如果您尝试其中任何一种,光标是否会出现在文本输入中? user1875642 applicationComplete 事件未在组件中调度。 Suni D. 我不知道如何在 javascrip 中做到这一点 @YuryEuceda applicationComplete 是 在应用程序初始化、由 LayoutManager 处理并附加到显示列表后调度。这是在应用程序启动序列期间调度的最后一个事件。它晚于应用程序的 creationComplete 事件,该事件在预加载器被移除且应用程序已附加到显示列表之前被调度。 【参考方案1】:

我解决了,这个问题是因为这是一个组件,并且是从主菜单调用的,并且在组件出现在屏幕上之前创建菜单的那一刻,就调度了 creationComplete 事件。我所做的是附加一个事件处理程序来显示事件,就是这样。

<mx:Canvas   xmlns:mx="http://www.adobe.com/2006/mxml" 
       creationComplete="init()" creationPolicy="all"
       show="focusManager.setFocus(employeeIDTextInput)"
       >

非常感谢每一位问我问题的人...

【讨论】:

以上是关于当应用程序启动时有两种状态时将焦点设置在 TextField 上的主要内容,如果未能解决你的问题,请参考以下文章

调用函数时将焦点设置到文本框

单击按钮时将焦点设置在滚动上

在页面加载时将焦点设置在 HTML 输入框上

Vue组件更改时将页脚保留在页面底部

Angular 2在组件加载时将焦点放在表单的第一个字段上

创建和显示布局时如何将焦点设置在视图上?