2011-08-10 124 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按鈕,這將使輸入失去焦點,觸發驗證,這將引發警報,等等。