Flex:在输入 ENTER 后 setFocus 不起作用

Posted

技术标签:

【中文标题】Flex:在输入 ENTER 后 setFocus 不起作用【英文标题】:Flex: setFocus does not work after ENTER on input 【发布时间】:2015-08-07 02:18:41 【问题描述】:

我想将焦点设置在 TextInput 上:按下按钮后效果很好,但是当我按下 TextInput 上的 ENTER 按钮时不工作:任何想法?

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[
            public function sendText():void 

                txt_input.enabled = false;
                trace(txt_input.text);
                txt_input.text = "";
                setTimeout(function ():void  
                    txt_input.enabled = true;
                    focusManager.setFocus(txt_input );
                
                    ,3000);         
            

        ]]>
    </fx:Script>
    <s:TextInput id="txt_input" x="173" y="330" enter="sendText()"/>
    <s:Button x="345" y="331" label="Button" click="sendText()"/>
</s:Application>

【问题讨论】:

【参考方案1】:

我以前也遇到过同样的问题。我不完全知道框架内部的内容,但我只是通过将焦点设置到另一个组件来完成我的工作。我知道这不是正确的方法。

在你的情况下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[
            public function sendText():void 

                txt_input.enabled = false;
                focusManager.setFocus(btn);
                trace(txt_input.text);
                txt_input.text = "";
                setTimeout(function ():void  
                    txt_input.enabled = true;
                    focusManager.setFocus(txt_input );
                
                    ,3000);         
            

        ]]>
    </fx:Script>
    <s:TextInput id="txt_input" x="173" y="330" enter="sendText()"/>
    <s:Button id="btn" x="345" y="331" label="Button" click="sendText()"/>
</s:Application>

我认为它以前不起作用是因为它与“启用”属性有关。

希望对你有帮助。

【讨论】:

【参考方案2】:

不要将焦点转移到 Ashish 代码中的其他组件,而是替换

focusManager.setFocus(btn);与

stage.focus = null;

【讨论】:

以上是关于Flex:在输入 ENTER 后 setFocus 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

WM_SETFOCUS和WM_KILLFOCUSWM_GETDLGCODECM_ENTER

vba textbox在失去焦点后如何重新获取焦点

想要在 Flex 的 Spark textinput 控件中设置光标位置

在 ROBOT Framework 中插入输入后如何按 TAB 或 ENTER 键

关于可编辑输入框的focus设置

关于可编辑输入框的focus设置