0 votes

Erreur de saisie de texte / validation et rétablissement de la valeur correcte précédente dans Flex

J'ai des zones de saisie de texte. Il y a une validation pour chacun des champs à l'aide de numberValidator. Maintenant, le problème est que j'utilise une boîte d'alerte pour montrer si une erreur se produit.

Organigramme : :

1> Insérer une valeur dans la boîte de texte. 2> NumberValidator valide l'entrée sur "trigger=change". 3> En cas d'erreur, un message d'alerte est affiché. L'utilisateur clique sur OK pour revenir au formulaire. 4> Le focus est remis sur la TextBox. 5> Mais la boîte d'alerte rend la valeur de l'entrée de texte vide / nulle, c'est-à-dire que la valeur d'erreur précédente saisie par l'utilisateur et la valeur correcte par défaut ne seront pas affichées maintenant.

Objectif : afficher la valeur correcte la plus récente qui a été saisie dans la zone de texte. Pas la valeur par défaut d'une autre, mais la valeur correcte la plus récente saisie par l'utilisateur.

Quelqu'un peut-il nous aider ?

0voto

Joel Hooks Points 4673

Vous devrez stocker la dernière réponse correcte dans une variable et faire en sorte que le gestionnaire de clic/fermeture de l'alerte remplace la valeur par la variable stockée.

Voici un exemple d'écoute d'un événement d'alerte :

<?xml version="1.0"?>
<!-- controls\alert\AlertEvent.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.events.CloseEvent;

            private var lastKnownCorrectAnswer:String = "Some Answer";

            private function alertListener(eventObj:CloseEvent):void {
                // Check to see if the OK button was pressed.
                if (eventObj.detail==Alert.OK) {
                    myText.text = lastKnownCorrectAnswer; 
                }
            }
        ]]>
    </mx:Script>

    <mx:TextInput id="myAnswer" 
        width="150" 
        text="" />
    <mx:Button id="myButton" 
        label="Copy Text" 
        click='Alert.show("Copy Text?", "Alert",
            Alert.OK | Alert.CANCEL, this,
            alertListener, null, Alert.OK);'/>
</mx:Application>

Vous devrez y ajouter votre logique de validation, mais vous avez compris l'idée. Ce qui précède provient de la page Documents d'alerte .

0voto

Phil C Points 167

Voici une réponse complète. J'ai utilisé l'événement "enter" de la zone de texte pour effectuer la validation, car l'événement "change" se déclenche après la saisie d'un seul caractère.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert

            // set last correct value to a default
            private var lastCorrectValue:String="411"

            function handleInvalid(event:Event)
            {
                Alert.show("invalid");
                textInput.text=lastCorrectValue
            }

            function handleValid()
            {
                Alert.show('Validation Succeeded!')
                lastCorrectValue=textInput.text
            }
        ]]>
    </mx:Script>
    <mx:TextInput id="textInput"
                  text="{lastCorrectValue}"/>
    <!-- Use the enter event of the text box to do validation. The change event fires after a single character-->
    <mx:NumberValidator source="{textInput}"
                        property="text"
                        integerError="Enter Integer value"
                        domain="int"
                        trigger="{textInput}"
                        triggerEvent="enter"
                        invalid="handleInvalid(event)"
                        valid="handleValid();"/>
</mx:Application>

0voto

Déclencher un événement sur l'entrée de texte FocusIn() et stocker la valeur du texte dans une variable. (Ce serait votre dernière bonne réponse). Réinitialiser le texte de la boîte de saisie à cette valeur après validation... J'espère que j'ai été assez clair :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X