Partage
  • Partager sur Facebook
  • Partager sur Twitter

Changer valeur input type number

problème pour passer de 9 à 10 - de 99 à 100 etc

Sujet résolu
    14 janvier 2018 à 11:51:14

    Bonjour à tous, 

    J'ai un formulaire dans lequel j'ajoute ou supprime des lignes dynamiquement. C'est un système pour faire des classes d'âge dans une requete SQL par la suite (choisir de 10 à 20ans puis 20 à 30 etc).

    https://jsfiddle.net/thombou/9qs1kqz7/

    Tout à l'air de bien fonctionner mis à part quand je veux passer de 9 à 10. Je m'explique : 

    si sur une classe d'age, je change l'âge maximal, la valeur du minimum de la classe suivante change en conséquence. Et si la nouvelle valeur du minimum dépasse celle du maximum existant, cette valeur maximale change aussi. Par contre il y a un problème lorsque minimum passe de 9 à 10, le maximum reste à 9... Il y a un problème à chaque fois que le maximum doit changer en ajoutant un chiffre (de 9 à 10, de 99 à 100 etc...)

    Je ne vois pas à quoi cela pourrait être du, étant donné que l'attribut change bien, lui...

    Essayez par exemple de créer trois classes (de 1 à 2, de 3 à 4 et de 4 à 5) et d'incrémenter la première classe jusque 10 ou 11, vous verrez alors que les valeurs des maximums pour les classes suivantes bloquent à 10...

    Si quelqu'un a une idée... 

    Merci d'avance et bonne journée, 

    Thombou

    P.S J'ai développé et testé mon code sous Chrome et Firefox, cependant il semble que le JsFiddle ne fonctionne pas bien sous Firefox... 

    -
    Edité par thombou 14 janvier 2018 à 12:02:47

    • Partager sur Facebook
    • Partager sur Twitter
      14 janvier 2018 à 12:27:17

      Quand je met la première classe de 1 à 2 et ajoute une deuxième

      il me crée une classe de 1 à 1 ..

      Quand j'incrémente le minimum de la première class rien ne se passe ..

      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2018 à 12:45:04

        Salut

        J'ai pas tout compris à ton problème, mais quand tu écris ça : 

        if (buttonMax.val() < buttonMax.attr("min"))

        Tu compares 2 chaines de caractères. Par exemple "11" < "9" est VRAI, de la même façon que "aa" se trouve avant "z" dans un dictionnaire.

        Tu dois convertir en nombre au moins une des 2 valeurs pour avoir une comparaison de nombres :

        if (+buttonMax.val() < buttonMax.attr("min"))



        • Partager sur Facebook
        • Partager sur Twitter
          14 janvier 2018 à 12:54:12

          Bon j'ai essayé à plusieurs reprises.

          Ton code présente des bugs , parfois la valeurs s’incrémente parfois non.

          Il arrrive même que lorsque je décrémente la classe suivant s’incrémente.

          surement un problème de conditions

          • Partager sur Facebook
          • Partager sur Twitter
            14 janvier 2018 à 12:56:28

            Merci pour vos réponses !

            LCaba a écrit:

            Salut

            J'ai pas tout compris à ton problème, mais quand tu écris ça : 

            if (buttonMax.val() < buttonMax.attr("min"))

            Tu compares 2 chaines de caractères. Par exemple "11" < "9" est VRAI, de la même façon que "aa" se trouve avant "z" dans un dictionnaire.

            Tu dois convertir en nombre au moins une des 2 valeurs pour avoir une comparaison de nombres :

            if (+buttonMax.val() < buttonMax.attr("min"))

            Merci ! C'était ca en effet ! Du coup juste une petite question. A chaque fois que je voulais convertir une chaine nombre j'utilisais la fonction parseInt(), est ce que ta méthode revient exactement au même ? (car c'est beaucoup plus rapide :) )

            mohzah : En effet sur le JSFiddle ca ne réagit pas pareil que sur mon code en local... Car cela n'arrive pas en local. La valeur du minimum de l'input change bien, elle... et je demande le changement au même endroit...

            Pour changer la valeur de l'input, je dois bien la changer avec la method val ?

            -
            Edité par thombou 14 janvier 2018 à 13:02:28

            • Partager sur Facebook
            • Partager sur Twitter
              14 janvier 2018 à 13:03:12

              Oui c'est bien le .val() pour remplacer la valeur du champ.

              Si j'ai bien compris le but est le suivant:

              Imaginons que j'ai 3 classes

              si j’incrémente la valeur max de la première classe

              la valeurs minimum de la prochaine classe doit s'incrementer.

              Que ce passe-t-il avec la troisième classe , elle devrait s'adapter aussi normalement?

              Déjà lorsque tu clone une classe , tu la clone avec le meme ID a chaque fois , alors que les ID devrait être unique pour chaque input.

              • Partager sur Facebook
              • Partager sur Twitter
                14 janvier 2018 à 13:09:11

                Pour les ID c'est une erreur qui est restée, je n'utilise plus les ID sur les classes, merci de me l'avoir signalée.

                Oui normalement troisième classe doit s'adapter si le maximum de la deuxième classe change. Ca marche parfaitement sur mon code sous chrome et Firefix mais pas sous JsFiddle. Est ce que le problème pourrait venir de JsFiddle ? 

                Avec la remarque de LCaba, mon problème initial est résolu, c'était bien que la comparaison se faisait entre deux chaines de caractères donc lorsque je passe de 9 à 10, la condition du if n'était pas remplie la valeur du maximum ne se mettait pas à jour...

                • Partager sur Facebook
                • Partager sur Twitter
                  14 janvier 2018 à 13:13:53

                  Ah oui je n'avais pas vu la réponse de LCaba qui lui à eu le courage de lire et comprendre ton code haha :D

                  N'oublie pas de mettre le projet en résolu.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 janvier 2018 à 13:25:54

                    thombou a écrit:

                    Merci pour vos réponses !

                     A chaque fois que je voulais convertir une chaine nombre j'utilisais la fonction parseInt(), est ce que ta méthode revient exactement au même ? (car c'est beaucoup plus rapide :) )

                    Simplement une petite question annexe, quelle est la meilleure méthode pour convertir en entier entre "+" et parseInt() ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 janvier 2018 à 13:42:21

                      $var1 = 2;
                      $var2 = '2';
                      
                      $total = $var1 + $var2;
                      // Je pense que PHP va automatiquement convertir le $var2 en int vu que tu fais une opération arithmétique.
                      


                      Mais dans les conditions :

                      if($var1 > $var2){
                      
                      }


                      Dans ce cas je compare un int avec un String. tu serais obliger de faire un parseInt(); sur var2 pour pouvoir comparer les deux entier.

                      En gros dés que tu fais des comparaisons de Chiffre mais que tes variables son pas des entier faudra les parser en INT

                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 janvier 2018 à 14:32:35

                        thombou a écrit:

                        thombou a écrit:

                        Merci pour vos réponses !

                         A chaque fois que je voulais convertir une chaine nombre j'utilisais la fonction parseInt(), est ce que ta méthode revient exactement au même ? (car c'est beaucoup plus rapide :) )

                        Simplement une petite question annexe, quelle est la meilleure méthode pour convertir en entier entre "+" et parseInt() ?


                        Dans la plupart des cas, c'est la conversion à la volée, avec le "+" (opérateur plus unitaire) qui est préférable : elle est plus courte, plus lisible (pas de parenthèse de virgule, etc...) et beaucoup plus rapide.

                        parseInt() peut être utile dans certains cas, comme les cas où la chaîne contient des caractères non numériques : par exemple "12€" donne 12 avec parseInt() alors qu'avec le plus unitaire on obtient NaN, ou si tu veux parser une chaine depuis un format binaire ou hexadécimal.

                        -
                        Edité par LCaba 14 janvier 2018 à 14:34:03

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 janvier 2018 à 10:03:58

                          Merci beaucoup à vous deux pour vos réponses et vos conseils !

                          Bonne continuation :)

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Changer valeur input type number

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown