IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

ng-change max input number


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut ng-change max input number
    Bonjour à tous,

    Je rencontre un problème sur la directive ng-change lorsque je cherche à l'appliquer sur un input de type number possédant un max.
    Mon but est de déclencher un traitement lorsque la valeur de l'input est valide. Mais lorsque je saisis délibérément une valeur invalide, mon traitement est tout de même appelé.

    Le lien permettant de reproduire mon problème (mon traitement génère juste un log d'alert dans la console):
    http://plnkr.co/edit/zWKMgQuG6Ca7CHIvGpKq?p=preview

    Si j'ajoute un 9 à la saisie, 99, contenu valide => ça log
    Si j'ajoute à nouveau un 9, 999, contenu invalide => ça log également alors que ça ne devrait pas
    Si j'ajoute à nouveau un 9, 9999, contenu invalide => pas de log

    Une idée ?
    Merci d'avance!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut je ne suis pas un specialiste d'angularJS,
    mais ta fonction maj() est systematiquement appelé du moment ou il y a un changement dans l'input (directive ng-change).

    donc :

    Si j'ajoute un 9 à la saisie, 99, contenu valide => ça log
    ok

    Si j'ajoute à nouveau un 9, 999, contenu invalide => ça log également alors que ça ne devrait pas
    pourquoi? meme invalide la directive ng-change est appliquée

    Si j'ajoute à nouveau un 9, 9999, contenu invalide => pas de log
    Moi c'est ca qui m'a perturbé... ca aurait du logguer
    mais a priori :

    The ngChange expression is only evaluated when a change in the input value causes a new value to be committed to the model.

    It will not be evaluated:

    if the value returned from the $parsers transformation pipeline has not changed
    if the input has continued to be invalid since the model will stay null
    if the model is changed programmatically and not by a change to the input value
    Note, this directive requires ngModel to be present.
    https://docs.angularjs.org/api/ng/directive/ngChange

    En mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($scope.example.value <= 99){
        		console.info('maj');
        	}
    tu auras le comportement voulu

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut
    Merci pour ton aide cedxgx.

    Dommage qu'on ne puisse pas déclencher le ng-change que si l'élément est valide.
    Pour ta solution, ça me dérange un peu de devoir à nouveau spécifier mes min / max, du coup j'utilise ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $scope.maj = function(){
            if($scope.myForm.input.$valid){
              ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jquery Change hidden input value
    Par devlm dans le forum jQuery
    Réponses: 11
    Dernier message: 31/01/2013, 15h11
  2. Réponses: 1
    Dernier message: 27/03/2009, 10h01
  3. spring hibernate max number of result
    Par mauroyb0 dans le forum Hibernate
    Réponses: 2
    Dernier message: 06/08/2007, 11h37
  4. system change number
    Par coco-sup dans le forum Oracle
    Réponses: 6
    Dernier message: 26/07/2006, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo