2010-07-27 65 views
5

我试图让一个带有可立即编辑的TextInput的弹出窗口。这意味着一旦显示弹出窗口,用户应该能够在TextInput内输入内容。将焦点设置在Popup的textInput控件上

问题是我无法专注于textInput。会发生什么情况是,当第一次按下某个键时,不会插入文本,只有在按下第二个键之后,该组件才会获得焦点并且用户才能够输入。例如,一旦弹出窗口打开导致显示“est”,就会输入“test”...

由于某些原因,组件仅在用户明确点击或键入内容时获得焦点。 Programmaticaly设置焦点不起作用。

任何意见/建议?

代码:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Panel xmlns="mog.miss.component.*" xmlns:mx="http://www.adobe.com/2006/mxml" > 

<mx:Script> 
    <![CDATA[ 
     import mx.managers.IFocusManagerComponent; 

     private function focus():void{ 
      focusManager.setFocus(commentTextInput as IFocusManagerComponent); 
      commentTextInput.setSelection(commentTextInput.text.length,commentTextInput.text.length); 
     } 

    ]]> 
</mx:Script> 
<mx:TextInput id="commentTextInput" creationComplete="{focus()}" /> 

</mx:Panel> 
+0

你有弹出 – Grumpy 2010-07-27 11:04:48

回答

2

的问题是,我是触发与F10键弹出呼叫。 F10是系统保留的...它确实触发了处理程序,弹出窗口已创建,但不知何故应用程序失去了焦点。使用另一个键修复它。唯一的保留键是F10。 More about that

0

这取决于你如何努力做到这一点。什么工作对我来说是处理弹出的creationComplete事件:

private function onCreationComplete():void 
{ 
    focusManager.setFocus(this.mytextInput as IFocusManagerComponent); 
} 

PS:在“处理程序”的例子是通过MXML添加所以它没有参数。

+0

出您使用的是什么操作系统和浏览器的好奇心按预期方式不工作... – 2010-07-27 11:31:13

+0

的来源是什么? – 2010-07-27 14:01:21

0

以下是对我有用的东西。在creationComplete事件弹出窗口:

private function onCreationComplete():void 
{ 
    callLater(this.commentTextInput.setFocus); 
} 
+0

这确实有效......问题完全是另一回事。我正在使用F10键来触发弹出窗口。恰巧F10是系统保留的。使用另一个键很好。 – 2010-09-01 15:47:14

0
在我的情况

我只是实现了IFocusManagerContainer在我的自定义组件,一切运行良好

私人VAR _defaultButton:IFlexDisplayObject中=/默认组件 /;

public function get defaultButton():IFlexDisplayObject{ 
     return _defaultButton; 
    } 
    public function set defaultButton(value:IFlexDisplayObject):void{ 
     _defaultButton = value; 
     ContainerGlobals.focusedContainer = null; 
    }