2011-08-10 95 views
0

下面的代码工作以下列方式:警报被触发多次

当我在txtother.textbox输入不正确的价值观和重点时,警报将显示为“请输入有效的格式掩码“。。 按下警告框中的“ok”按钮后,txtOther.focusout即使再次触发。 即紧接在按下OK的警报之后,再次显示相同的ALERT

我添加的代码为UR参考:

//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应该重点关注,警报不应该像以前一样重复。

+0

是否有一个原因,你做你自己的自定义验证,而不是使用Flex中的可用验证类? –

+0

@J_A_X:是的,要求就是这样。 –

+0

我认为问题是这样的: 当我按下提示框的OK按钮时,TxtOther.textbox的FocusOut事件被触发,这就是为什么警报会一次又一次地出现。 –

回答

0

编辑:

stage.focus = txtOther; 

这将在AS3的作品...我不知道弯曲。

+0

你的想法是好的。我会测试它,并标记你的答案是正确的。 –

+1

但这不起作用,因为他在eventlistener中将firstTime变量设置为true,因此总是调用IF。你必须将firstTime移出事件处理程序......但这不是解决问题的办法,只是一种解决方法。 – pkyeck

+0

pkyeck:你好,我同意你的意见。 –

1

这是因为您第二次在OK按钮上有focusIn="txtOther_Validate();"。只需删除focusIn处理程序,你应该没问题。

+0

这** txtOther.setFocus(); **条件也是强制性的.. –

+0

@ user238284,我不明白?! – pkyeck

+0

即在按下alertBox的** OK **按钮后,焦点应该转到** TxtOther.text **,以便用户可以直接修复错误。 –

0

我可能会出错,但我认为警告框不会等到您关闭它。所以你触发你的验证,并立即将焦点设置回输入。现在,您单击警告框的ok按钮,这将使输入失去焦点,触发验证,这将引发警报,等等。