Actionscript 3 焦点问题,焦点有时指向未知对象

Actionscript 3 焦点问题,焦点有时指向未知对象,actionscript-3,flex3,Actionscript 3,Flex3,[FocusEvent type=“focusIn”bubbles=true cancelable=false eventPhase=3 relatedObject=null shiftKey=false keyCode=0] 当我用鼠标点击一个文本字段时,我希望另一个(可编辑的)字段获得焦点,但当前焦点在某个地方丢失。。我不知道焦点在哪里 我制作了一个textfield的侦听器,它试图用stage.focus=editfield将焦点设置回另一个字段,但它不起作用 我在这个阶段也有相同的foc

[FocusEvent type=“focusIn”bubbles=true cancelable=false eventPhase=3 relatedObject=null shiftKey=false keyCode=0]

当我用鼠标点击一个文本字段时,我希望另一个(可编辑的)字段获得焦点,但当前焦点在某个地方丢失。。我不知道焦点在哪里

我制作了一个textfield的侦听器,它试图用stage.focus=editfield将焦点设置回另一个字段,但它不起作用

我在这个阶段也有相同的focus listener,但没有区别。

因为您在示例中列出了一个“FocusEvent”,所以我将重点介绍Flex解决方案。那不是一门Flash AS3课程

我敢打赌,Flex正试图自行管理焦点,这与您设置焦点的尝试背道而驰。然而,有很多方法可以解决这个问题

Flex是否试图与您作对?
首先,您可能希望使用FocusManager类或UIComponent setFocus方法(这取决于您具体需要做什么,我相信FocusManager允许您有多个目标对象,而setFocus方法要简单得多),而不是stage.focus。这具有在Flex组件系统中本机工作的优点

您听到的是正确的事件吗?
否则,请尝试确保您要查找的FocusEvent的目标既不是您的textfield,也不是您的textfield的子对象。(为了理智起见)。如果这不起作用,请确保只调度一次事件。接下来,我将尝试使用MouseEvent.CLICK而不是FocusEvent

其他一切都失败了吗?
不幸的是,Flex往往远远不够完美。我发现有时我不得不使用setTimeout来回避这样一个事实,即它没有以“正确的顺序”触发事件——您可以调整某些内容的大小,但在重新呈现之前会调度“resize”,您可以更改字体,TextArea的TextWidth属性不会返回正确的数字。解决办法

private function myListener( event:FocusEvent ):null
{
    setTimeout( function(){ editfield.setFocus(); }, 35 );
}
由于您在示例中列出了一个“FocusEvent”,因此我将重点介绍Flex解决方案。那不是一门Flash AS3课程

我敢打赌,Flex正试图自行管理焦点,这与您设置焦点的尝试背道而驰。然而,有很多方法可以解决这个问题

Flex是否试图与您作对?
首先,您可能希望使用FocusManager类或UIComponent setFocus方法(这取决于您具体需要做什么,我相信FocusManager允许您有多个目标对象,而setFocus方法要简单得多),而不是stage.focus。这具有在Flex组件系统中本机工作的优点

您听到的是正确的事件吗?
否则,请尝试确保您要查找的FocusEvent的目标既不是您的textfield,也不是您的textfield的子对象。(为了理智起见)。如果这不起作用,请确保只调度一次事件。接下来,我将尝试使用MouseEvent.CLICK而不是FocusEvent

其他一切都失败了吗?
不幸的是,Flex往往远远不够完美。我发现有时我不得不使用setTimeout来回避这样一个事实,即它没有以“正确的顺序”触发事件——您可以调整某些内容的大小,但在重新呈现之前会调度“resize”,您可以更改字体,TextArea的TextWidth属性不会返回正确的数字。解决办法

private function myListener( event:FocusEvent ):null
{
    setTimeout( function(){ editfield.setFocus(); }, 35 );
}