web-dev-qa-db-fra.com

Flex: Saisie de texte qui accepte uniquement les nombres

Besoin d'un code qui accepte uniquement les chiffres. Lors de la saisie, le code doit vérifier s’il s’agit d’un numéro, sinon il doit retirer la clé entrée ou ne pas la saisir du tout.

24
Treby

regardez la propriété restrict sur la classe TextInput. Réglez-le sur "0-9"

31
Gregor Kiddie
   <s:TextInput id="textInput"
                restrict="0-9"
                widthInChars="20"
                maxChars="20" />
   <mx:TextInput id="textInput"
                restrict="0-9"
                widthInChars="20"
                maxChars="20" />
13
Sri

Il existe un contrôle appelé NumericStepper.

Voir: http://livedocs.Adobe.com/flex/3/html/help.html?content=controls_11.html

Si vous ne voulez pas que les flèches haut et bas soient là, vous pouvez définir leur classe d'habillage sur null.

Cordialement, Sly

3
sly1024
<?xml version="1.0"?>
<!-- Simple example to demonstrate the TextInput control. -->
<mx:Application xmlns:mx="http://www.Adobe.com/2006/mxml" viewSourceURL="srcview/index.html">

    <mx:Panel title="Dodawanie dwóch liczb :)" height="279" width="238" 
        paddingTop="10" paddingLeft="10">

        <mx:TextInput id="src"
          restrict="0-9"
                maxChars="20" />
        <mx:TextInput id="dest"
          restrict="0-9"
                maxChars="20"/>

        <mx:Button label="dodaj" click= "dodaj();" id="but"/>
        <mx:Label text="Suma" width="59"/>
        <mx:Label text="0" width="160" id="wynik"/>

    </mx:Panel>
    <mx:Script>
     <![CDATA[
      import mx.formatters.NumberBase;
      public function dodaj():Number
      {
       var liczba:Number = Number(src.text) + Number(dest.text);
       wynik.text = liczba.toString();
       return 0;
      }

     ]]>
    </mx:Script>
</mx:Application>
2
wilko
1
Mihai Nita

J'utilise quelque chose comme

<s:TextInput id="textInput"
    restrict="0-9.\\-"
    change="onChangeNumberTextInput(event, 6)"/>

private function onChangeNumberTextInput(event:TextOperationEvent, precision:uint = 2):void
    {
        var strNumber:String = "";
        if (event.currentTarget is mx.controls.TextInput)
            strNumber = (event.currentTarget as mx.controls.TextInput).text;
        else if (event.currentTarget is spark.components.TextInput)
            strNumber = (event.currentTarget as spark.components.TextInput).text;
        else
            return;

        var ind:int = strNumber.indexOf(".");
        if (ind > -1)
        {
            var decimal:String = strNumber.substring(ind + 1);
            if (decimal.indexOf(".") > -1)
                strNumber = strNumber.substring(0, ind + 1 + decimal.indexOf("."));
            if (decimal.length > precision)
                strNumber = strNumber.substring(0, ind + 1 + precision);
        }

        if (event.currentTarget is mx.controls.TextInput)
            (event.currentTarget as mx.controls.TextInput).text = strNumber;
        else if (event.currentTarget is spark.components.TextInput)
            (event.currentTarget as spark.components.TextInput).text = strNumber;
    }

La fonction d'écoute de changement supprime tout ce qui dépasse le nombre de caractères de précision de la virgule, ou toute seconde occurrence de ".":

1
Rahul Singhai

Je ne sais pas ce que vous voulez faire exactement. Si vous voulez juste faire la somme de ces deux choses, utilisez la commande suivante

{parseInt(txt1.text) + parseInt(txt2.text)}

votre exemple concatène simplement ces deux chaînes. Cet exemple tente de convertir le texte en nombre, puis d'additionner ces deux valeurs.

0
zvjerka24

Vous devez modifier la propriété pour que l'application demande uniquement le clavier numérique de l'application. 

essayez 'SoftKeyboard "numéro"; ' 

0
Ryan Watts