警报被多次触发

时间:2011-08-10 05:05:16

标签: flex events actionscript alert

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

当我在 txtother.textbox 中输入错误值并将其聚焦时,警报将显示为“请输入有效的格式掩码。”。 按下Alertbox中的“ ok ”按钮后,再次触发 txtOther.focusout 。 即,在按下确定警告后立即再次显示相同的 ALERT

我添加了您的参考代码:

//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(); //
    }
}

我不想一次又一次地来警惕.. 我需要这样的方式,当按下警告的ok按钮时。 txtother.text应该是焦点,警报不应该像以前那样反复出现。

3 个答案:

答案 0 :(得分:1)

这是因为你第二次在ok按钮上有focusIn="txtOther_Validate();"。只需删除focusIn处理程序就可以了。

答案 1 :(得分:0)

修改

stage.focus = txtOther;

这将在as3中起作用...我不知道flex。

答案 2 :(得分:0)

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