2009-02-12 181 views
1

[FocusEvent类型= “的focusIn” 气泡=真或取消=假的EventPhase = 3则relatedObject = NULL Shift键,=假键代码= 0]焦点问题,焦点有时前进到未知物体

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

我让一个文本字段的侦听器试图将焦点设置回stage.focus = editfield的另一个字段,但它不工作。

我也有同样的焦点听众在阶段,但没有区别。

回答

1

由于您在示例中列出了“FocusEvent”,因此我将专注于Flex解​​决方案。这不是一个Flash AS3类。

我会打赌,Flex试图自己管理焦点,这是与你尝试设置它的尝试。但是,有很多方法可以解决这个问题。

Flex是否试图对付你?
首先,您可能想要使用FocusManager类或UIComponent setFocus方法(这取决于您明确需要做什么,我相信FocusManager允许您有多个对象作为目标,而setFocus方法更简单很多)而不是stage.focus。这有利于在Flex组件系统中本地工作。

您是否正在倾听正确的事件?
如果失败,请尝试确保您要查找的FocusEvent的目标既不是您的文本字段,也不是您的文本字段的子项。 (只是为了理智)。如果这不起作用,请确保您只发送一次事件。接下来,我会尝试使用MouseEvent.CLICK而不是FocusEvent。

一切都失败了吗?
不幸的是,Flex通常很不完美。我发现有时候我不得不使用setTimeout来解决这个事实,即它不会以“正确的顺序”触发事件 - 您调整某些内容,但是“重新调整”会在重新呈现之前调度,您更改字体,并且TextArea的TextWidth属性不会返回正确的数字。解决方法

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