Caret on textInput永远不会消失

时间:2011-01-29 01:41:53

标签: flex actionscript-3

我有一个包含各种textInputs和提交按钮的登录表单。如果您提交正确的登录凭据,系统将卸载登录视图并加载应用程序视图。很标准。 不幸的是,我注意到这个奇怪的错误,如果你用鼠标悬停在其中一个textInput框上,然后只用键盘填充表格(并将鼠标停在textInput的顶部),然后选择Tab键到提交按钮并按空格键,即通过键盘登录,无论你做什么(移动,点击),鼠标光标都将在新视图中保持插入符号,直到找到另一个textInput来撤消光标状态。

我试过通过CursorManager做各种各样的事情,但似乎没有什么可以做的。我已经尝试将事件ROLL_OUT或MOUSE_OUT事件调度到textInput但是这也没有。

我试图在一个小例子中再现这个并且无法实现,我意识到这对我的帮助更加困难。如果有人处理类似的事情或者听到任何可能听起来有联系的指针,他们仍然会喜欢听到。

谢谢你!

˚F

3 个答案:

答案 0 :(得分:1)

我有完全相同的问题。这是我的登录屏幕视图:

<fx:Style>
    @namespace s "library://ns.adobe.com/flex/spark";
    @namespace mx "library://ns.adobe.com/flex/mx";
    .textInput
    {
        showErrorTip : true;
        showErrorSkin : true;
    }
</fx:Style>
<fx:Declarations>
    <mx:StringValidator id="usernameValidator" source="{username}" property="text"
                        trigger="{signinButton}" triggerEvent="click" required="true" />
    <mx:StringValidator id="passwordValidator" source="{password}" property="text"
                        trigger="{signinButton}" triggerEvent="click" required="true"/> 
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import info.thwm.appx.model.vo.LoginVO;
        import info.thwm.appx.view.events.ViewEvent;

        import mx.validators.Validator;

        public static const NAME:String = "LoginView";
        [Bindable] public var loginVO:LoginVO = new LoginVO();

        private function init():void{
            focusManager.setFocus( username );
            sendEvent( ViewEvent.VIEW_CREATED, NAME );
        }

        private function sendEvent( type:String, data:Object=null ):void{
            dispatchEvent( new ViewEvent( type, data ) );
        }

        private function loginUser(event:MouseEvent = null):void{
            var validators:Array = [usernameValidator, passwordValidator];
            var errors:Array;
            errors = Validator.validateAll(validators);
            if (errors.length == 0){                                        
                sendEvent( ViewEvent.BTN_LOGIN_CLICK, loginVO );
            }                               
        }
    ]]>
</fx:Script>

<s:Panel width="320" height="230" title="Sign In">
<s:layout>
    <s:VerticalLayout/>
</s:layout>
<s:Form id="form1" styleName="formStyle" defaultButton="{signinButton}">            <s:layout>
            <s:FormLayout paddingLeft="25" gap="-5"/>
        </s:layout>
        <s:FormItem label="Username" required="true" skinClass="info.thwm.appx.view.skins.FormItemSkin">
            <s:TextInput id="username" text="@{loginVO.username}" styleName="textInput"/>
        </s:FormItem>
        <s:FormItem label="Password" required="true" skinClass="info.thwm.appx.view.skins.FormItemSkin">
            <s:TextInput displayAsPassword="true" id="password" text="@{loginVO.password}" styleName="textInput"/>
        </s:FormItem>
        <s:FormItem>
            <s:CheckBox label="Remember" id="remember" selected="@{loginVO.remember}"/>
        </s:FormItem>
        <s:FormItem>
            <s:Button label="Sign In" id="signinButton" click="loginUser(event)"/>
        </s:FormItem>
    </s:Form>
    <s:controlBarContent>
        <s:HGroup width="100%" verticalAlign="middle">
            <s:Button label="Register" id="registerButton" click="sendEvent( ViewEvent.BTN_REGISTER_CLICK );" />
            <s:Label buttonMode="true" color="#57595A" text="Forgot your username or password?" click="sendEvent( ViewEvent.BTN_PSW_REMINDER_CLICK );"/>
        </s:HGroup>
    </s:controlBarContent>
</s:Panel>

没有什么特别之处,但是如果我用鼠标选择用户名字段然后只使用键盘,那么一旦我到达下一个视图,鼠标光标就会变成输入插入符号。绕过它的唯一方法是在下一个视图的onCreationComplete事件函数中添加这一行“Mouse.cursor = MouseCursor.ARROW”。

答案 1 :(得分:0)

尝试将焦点明确设置为其他对象?见UIComponent.setFocus()

答案 2 :(得分:0)

将我的应用程序剥离到几乎裸露的骨头后,我注意到我的textInputs的text属性绑定到另一个变量的字段。我不确定为什么会产生上述问题,但采取该绑定解决了问题。我希望我能在这个问题上做更多的研究,但遗憾的是,这已经花了太多时间。