2011-08-10 7 views
0

次のコードは、次のように動作をトリガされ有効なフォーマットマスク。。 Alertboxの "ok"ボタンを押すと、txtOther.focusoutが再びトリガされます。 つまり、警告のOKを押した直後に同じ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にはフォーカスがあり、以前と同じように何度も何度も警告が表示されることはありません。

+0

flexで利用できる検証クラスを使用する代わりに独自のカスタム検証を行う理由はありますか? –

+0

@J_A_X:はい、実際はそのような要求でした。 –

+0

問題は次のようなものだと思います: 警告ボックスのOKボタンを押すと、TxtOther.textboxのFocusOutイベントがトリガされます。これが何度も繰り返されます。 –

答えて

0

EDIT:

stage.focus = txtOther; 

この意志はAS3で動作します...私はフレックスのことは知りません。

+0

よろしいですか?私はそれをテストし、正しいと答えてURをマークします。 –

+1

しかし、これは動作しません。なぜなら、彼はeventListenerでfirstTime変数をtrueに設定しているため、IFは常に呼び出されるからです。イベントハンドラからfirstTimeを移動させる必要がありますが、これは問題の解決策ではなく、回避策です。 – pkyeck

+0

pkyeck:ya私はあなたに同意します。 –

1

あなたはもう一度okボタンにfocusIn="txtOther_Validate();"があるためです。 focusInハンドラを削除するだけで大​​丈夫です。

+0

this ** txtOther.setFocus(); **条件も必須です.. –

+0

@ user238284私は理解できませんか? – pkyeck

+0

alertBoxの** OK **ボタンを押すと** TxtOther.text **にフォーカスが移動し、ユーザーはエラーを直接修正できます。 –

0

エラーが発生している可能性がありますが、アラートボックスを閉じるまで待機しないと思います。したがって、検証をトリガーし、直ちに入力をフォーカスに戻します。アラートボックスの[OK]ボタンをクリックすると、インプットがフォーカスを失ってバリデーションがトリガーされ、アラートが発生します。