1

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

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

我为 textfield 创建了一个侦听器,它试图将焦点设置回另一个带有 stage.focus = editfield 的文件,但它不起作用。

我在舞台上也有相同的焦点听众,但没有区别。

4

1 回答 1

1

由于您在示例中列出了“FocusEvent”,因此我将重点介绍 Flex 解决方案。那不是 Flash AS3 类。

我敢打赌,Flex 正试图自己管理焦点,而这与你设置它的尝试搞砸了。然而,有很多方法可以解决这个问题。

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

你在听正确的事件吗?
如果做不到这一点,请尝试确保您正在寻找的 FocusEvent 的目标既不是您的文本字段也不是您的文本字段的子项。(只是为了理智)。如果这不起作用,请确保您只分派了一次事件。接下来,我将尝试使用 MouseEvent.CLICK 而不是 FocusEvent。

其他一切都失败了吗?
不幸的是,Flex 通常远非完美。我发现有时我必须使用 setTimeout 来解决它不会以“正确的顺序”触发事件的事实——你调整了某些东西的大小,但是在重新渲染之前调度了“RESIZE”,你改变了字体,并且 TextArea 的 TextWidth 属性不返回正确的数字。解决方法

private function myListener( event:FocusEvent ):null
{
    setTimeout( function(){ editfield.setFocus(); }, 35 );
}
于 2009-02-12T16:24:27.443 回答