Apache flex 警报被多次触发

Apache flex 警报被多次触发,apache-flex,events,actionscript,alert,Apache Flex,Events,Actionscript,Alert,以下代码的工作方式如下: stage.focus = txtOther; 当我在txtother.textbox中输入不正确的值并将焦点调出时,将显示一条警报“请输入有效的格式掩码。”。 按下Alertbox中的“ok”按钮后,将再次触发txtOther.focusout偶数。 i、 e.按下警报的OK后,立即再次显示相同的警报 我已添加代码供您参考: //in mxml File: <mx:Canvas label="General" > <mx:VBox> <

以下代码的工作方式如下:

stage.focus = txtOther;
当我在txtother.textbox中输入不正确的值并将焦点调出时,将显示一条警报“请输入有效的格式掩码。”。 按下Alertbox中的“ok”按钮后,将再次触发txtOther.focusout偶数。 i、 e.按下警报的OK后,立即再次显示相同的警报

我已添加代码供您参考:

//in mxml File:
<mx:Canvas label="General" >
<mx:VBox>
<mx:Canvas id="cvsGeneral"> 
<mx:TextInput id="txtOther" focusOut="txtOther_Validate();"/>
</mx:Canvas>
</mx:VBox>                              
</mx:Canvas>

<mx:Canvas width="100%" height="5%" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:HBox width="80%" height="100%" horizontalAlign="left">
<mx:Button width="64" label="Save" id="btnSave" click="btnSave_Click();" focusIn="txtOther_Validate();"/>
</mx:HBox>
</mx:Canvas>


//Validating action script is as follows:
public function txtOther_Validate():void{
    var formatMask: String = null;  
        if(txtOther.editable && txtOther.enabled){
            if(txtOther.text != ""){
                formatMask = txtOther.text;
                if(conditions to validate){
                    //some expression
                }               
                if(formatMask.length < 12){
                    Alert.show("Please enter format mask with minimum 12 digits.");
                    txtOther.setFocus();
                    return;
                }               VariableEditControl.getInstance().validateFormatMask(txtOther.text,validateFormatMask_Result,validateFormatMask_Fault, validateFormatMask_Error);
            }
        }   
}
public function validateFormatMask_Result(event:PLEvent): void {
    var result:String = event.getData().toString(); // here lets assume that the result variable is stored as "FAILURE"
    if(result == "FAILURE"){
        Alert.show("Please enter a valid Format Mask.");
        txtOther.setFocus(); //
    }
}
//在mxml文件中:
//验证操作脚本如下所示:
公用函数txtOther_Validate():void{
var formatMask:String=null;
如果(txtOther.editable&&txtOther.enabled){
如果(txtOther.text!=“”){
formatMask=txtOther.text;
if(验证条件){
//一些表情
}               
如果(formatMask.length<12){
警报。显示(“请输入至少12位的格式掩码”);
setFocus();
返回;
}VariableEditControl.getInstance().validateFormatMask(txtOther.text、validateFormatMask_结果、validateFormatMask_错误、validateFormatMask_错误);
}
}   
}
公共函数validateFormatMask_结果(事件:pleEvent):无效{
var result:String=event.getData().toString();//这里假设结果变量存储为“FAILURE”
如果(结果=“失败”){
显示(“请输入有效的格式掩码”);
setFocus()//
}
}
我不希望警报一次又一次地出现。。 我需要这样一种方式,即当按下警报的ok按钮时。
txtother.text
应处于焦点位置,并且警报不应像以前那样反复出现。

编辑:

stage.focus = txtOther;

这将在as3中工作。。。我不知道flex。

这是因为您第二次在ok按钮上使用了
focusIn=“txtOther_Validate();”
。只要卸下focusIn处理程序,您就会没事。

我可能出错,但我认为警报框不会等到您关闭它。因此,您触发验证并立即将焦点设置回输入。现在,单击警报框的“确定”按钮,该按钮将使输入失去焦点,从而触发验证,从而引发警报,该警报将。。。诸如此类。

你为什么要做自己的自定义验证而不是使用flex中可用的验证类?@J_a_X:是的,实际上要求是这样的。我认为问题是:当我按下警报框的OK按钮时,TxtOther.textbox的FocusOut事件被触发,这就是为什么一次又一次的提醒。在一些网站上,他们建议我使用callLater()是正确的选择吗?我以后如何在代码中使用call?这是一个糟糕的需求/UX。不管怎样,您为什么不继续使用验证库并侦听验证程序上的“无效”和“有效”事件呢。我相信有一种方法可以阻止他们显示错误字符串。你的想法没问题。我将测试它,并将您的答案标记为正确。但这不起作用,因为他正在eventlistener中将firstTime变量设置为true,因此总是调用IF。您必须第一次移出eventhandler。。。但这不是问题的解决方案,只是一个解决办法。你。。。我的回答很愚蠢。可能是这个阶段。focus=txtOther;当使用“stage.focus=txtOther;”时,连续创建了多个警报,我的系统被挂起。请使用特定的容器,而不是stage。@user238284,我不明白?!i、 e.按下alertBox的OK按钮后,焦点应转到TxtOther.text,以便用户可以直接修复错误。