我有一个包含各种textInputs和提交按钮的登录表单。如果您提交正确的登录凭据,系统将卸载登录视图并加载应用程序视图。很标准。 不幸的是,我注意到这个奇怪的错误,如果你用鼠标悬停在其中一个textInput框上,然后只用键盘填充表格(并将鼠标停在textInput的顶部),然后选择Tab键到提交按钮并按空格键,即通过键盘登录,无论你做什么(移动,点击),鼠标光标都将在新视图中保持插入符号,直到找到另一个textInput来撤消光标状态。
我试过通过CursorManager做各种各样的事情,但似乎没有什么可以做的。我已经尝试将事件ROLL_OUT或MOUSE_OUT事件调度到textInput但是这也没有。
我试图在一个小例子中再现这个并且无法实现,我意识到这对我的帮助更加困难。如果有人处理类似的事情或者听到任何可能听起来有联系的指针,他们仍然会喜欢听到。
谢谢你!˚F
答案 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属性绑定到另一个变量的字段。我不确定为什么会产生上述问题,但采取该绑定解决了问题。我希望我能在这个问题上做更多的研究,但遗憾的是,这已经花了太多时间。