Partage
  • Partager sur Facebook
  • Partager sur Twitter

jquery parseint

qu'est ce qui ne va pas ?

Sujet résolu
    28 novembre 2011 à 0:34:25

    bonsoir,
    pouvez vous me dire ce qui ne va pas ?
    <script>
    $ (function() {
       $('#att6').trigger('change', function(){
    	if (parseInt($('#k6').val()) != $('#k6').val()){ $('#att6').show();}
       });
    						
    });	
    </script>
    


    Ce que je cherche à faire :
    la valeur de k6 est modifiée par une fonction javascript qui additionne ou soustraire les valeurs de plusieurs input. (la dessus, pas de souci)
    Quand la valeur de k6 change, la fonction jquery vérifie si le chiffre n'a pas de virgule (est entier).
    Si il y a une virgule, j'affiche une petite image (att6).

    En javascript, l’événement onChange ferait l'affaire mais ne fonctionne que si c'est l'utilisateur qui modifie la valeur, pas si c'est js qui le fait.
    D'ou l'emploi de jquery avec trigger.

    Voilà, c'est une succession de recherche qui m'a permis d’écrire ce bout de code dont je pense (j'espère) que le principe est juste mais il doit y avoir des erreurs sur la forme que je ne maitrise pas du tout.

    Merci pour votre aide.
    Christophe
    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2011 à 1:28:19

      Salut,
      je me trompe peut-être mais tu dis "Quand la valeur de k6 change" , et tu mets le trigger change sur $('#att6') ?
      sinon il me semble que tu peux mettre directement le " ! " avant parseint au lieu d'écrire 2 fois .val() pour vérifier le parseint
      • Partager sur Facebook
      • Partager sur Twitter
        28 novembre 2011 à 8:57:36

        Citation : Erroll

        je me trompe peut-être mais tu dis "Quand la valeur de k6 change" , et tu mets le trigger change sur $('#att6') ?



        Tu ne te trompe pas. Mais il ne se passe toujours rien
        voici le code corrigé :
        <script>
        $ (function() {
           $('#k6').trigger('change', function(){
        	if (parseInt($('#k6').val()) != $('#k6').val()){ $('#att6').show();}
           });
        						
        });	
        </script>
        



        Mais j'ai peut être tout faut ?
        voici ce que ça donnerait en javascript :

        <input type="text" value="0" name="k6" id="k6" size="3" onchange="javascript:if(parseInt(this.value) != this.value){document.getElementById('att6').style.display='block';}" />;
        
        <img src="icones/attention.png" width="25" height="25" id="att6" style="display:none;"/>
        


        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2011 à 9:43:21

          Quelque chose comme ça ?
          $('document').ready(function() {
             $('#k6').trigger('change', function(){
          	if ( ! parseInt($('#k6').val()) ){ 
                        $('#att6').show();
                  }
             });						
          });
          


          ou comme ça ?

          $('document').ready(function() {
             $('#k6').live('change', function(){
          	if ( ! parseInt($('#k6').val()) ){ 
                        $('#att6').show();
                  }
             });						
          });
          
          • Partager sur Facebook
          • Partager sur Twitter
          Never Trust User Input This is the truth
            28 novembre 2011 à 10:16:21

            Petite parenthèse et conseil à l'utilisation de parseInt : peu de gens le font mais il existe un 2eme paramètre optionnel que l'on peut indiquer : la base de destination : base décimal, binaire etc.

            Si ce n'est pas spécifié alors on peut avoir des surprises :

            parseInt('20');       // returns what you expect, however…
            parseInt('020');      // returns 16
            parseInt('000020');   // returns 16
            parseInt('020', 10);  // returns 20 as we've specified the base to use
            


            source : http://coding.smashingmagazine.com/201 [...] ighter_475621

            Donc essayez toujours d'écrire de cette façon
            parseInt("1234",10);
            
            • Partager sur Facebook
            • Partager sur Twitter
              28 novembre 2011 à 10:58:28

              non, toujours pas.
              Et live ne s'applique pas à change

              Citation


              http://jquery.developpeur-web2.com/doc [...] ents/live.php
              Les évènements suportés : click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup.
              Les évènements non suportés: blur, focus, mouseenter, mouseleave, change, submit.

              • Partager sur Facebook
              • Partager sur Twitter
                28 novembre 2011 à 11:23:16

                Citation : tof63

                non, toujours pas.
                Et live ne s'applique pas à change



                C'est bien catégorique comme affirmation ça !!

                Citation : JQuery Documentation officielle


                Doc JQuery
                As of jQuery 1.4 the .live() method supports custom events as well as all JavaScript events that bubble.



                Donc tu as raison mais seulement pour les versions 1.3 et inferieures
                • Partager sur Facebook
                • Partager sur Twitter
                Never Trust User Input This is the truth
                  28 novembre 2011 à 17:34:14

                  finalement, à force de ne pas trouvé, j'ai solutionné mon problème comme ça :

                  J'ai fait une fonction javascript :
                  function entier(total, lequel){
                  	var tot = total.value;
                  	if (parseInt(total) == total){ 
                  		document.getElementById(lequel).style.display='none'; 	
                  	}
                  	else {
                  		document.getElementById(lequel).style.display='block'; 	
                  	}
                  }
                  


                  que j'appelle sur input avec onBlur:
                  <input type="text" value="" size="3" onblur="javascript: entier(document.getElementById('k6').value, 'att6');" />
                  


                  ainsi, si la valeur de k6 et un nombre à virgule, cela m'affiche l'image ayant l'id att6 et l'enleve si la valeur redevient un entier.

                  Ce que je me demande, c'est pourquoi il m'a fallut plusieurs heures pour faire ça qui me parait plus simple qu'avec jquery. La fatigue sans doute.

                  Merci à ceux qui m'ont aidé.
                  Christophe

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 novembre 2011 à 17:51:10

                    Effectivement.
                    Du coup en JQuery ça donne ça
                    function entier(total, lequel){
                            // ici peut etre une erreur de copiage ? tot n'est pas utilisé
                    	var tot = total.val();
                    	if (parseInt(total) == total){ 
                    		$('#'+lequel).hide();
                    	}
                    	else {
                    		$('#'+lequel).show();
                    	}
                    }
                    

                    <input type="text" value="" size="3" onblur="entier($('#k6').val(), 'att6');" />
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Never Trust User Input This is the truth
                      28 novembre 2011 à 19:59:24

                      ha oui,
                      j'avais mis le parseint dans la ligne var tot = .....
                      Mais elle n'est pas utile effectivement.
                      Merci.

                      Et qu'est ce qui est le mieux en terme de performance, comme j'ai fait ou avec jquery ?
                      • Partager sur Facebook
                      • Partager sur Twitter

                      jquery parseint

                      × 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