Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script SMS

Ecrire un texte grace au pavé numérique

Sujet résolu
    14 janvier 2009 à 14:40:42

    Bonjour à tous !

    Je suis en train de faire un petit script qu'y permet d'écrire un texte via le pavé nmérique (Comme un SMS avec un portable).

    J'arrive bien à obtenir les lettres en appuyant plusieurs fois sur une touche, mais évidemment je tombe sur un problème.
    En effet je remet mon compteur (compteur servant à savoir combien de fois l'utilisateur à appuyer sur la touche 1 par exemple) à 0 toutes les 3 secondes.

    Mon problème est le suivant :
    J'affiche la première lettre et quand je commence un deuxième elle remplasse la première.

    Voici mon code, si quelqu'un peut m'aider :

    <html>
    <head>
    	<title>Test touche</title>
    
    <script language="JavaScript">
    	
    
    var tabTouche1 = [".",",","1"];
    var tabTouche2 = ["a","b","c","2"];
    var tabTouche3 = ["d","e","f","3"];
    
    
    
     
    function clearTime() {
    
    	document.getElementById('nbreTouche').value = -1;
    	
    	
    	
    	
    	setTimeout("clearTime()",3000);	
    
    }
    
    function calculNbre() {
    	
    	var nbre =  document.getElementById('nbreTouche').value;
    	nbre++;
    	
    	
    	document.getElementById('nbreTouche').value = nbre;
    		
    	
    	return nbre;
    }
    
    function trouveLettre() {
    	
    	var evtobj=window.event;
      var touche=evtobj.keyCode;
      
      //var nbre = calculNbre();
      var ladate = new Date();
      var time = ladate.getSeconds();
      var sec = time + 2;  
      var nextTime = sec * 1000;
      
    
    
      return touche;
      
    }
    
    function afficheLettre(touche,nbre) {
    	
    	var lettre;
    	var content = document.getElementById('lettre').value;
    	
    	if(touche == 49)
    		lettre = tabTouche1[nbre];
    	else if(touche == 50)
    		lettre = tabTouche2[nbre];
    	else if(touche == 51)
    		lettre = tabTouche3[nbre];
    		
    	return lettre;
    		
    }
    
    function affiche(){
    
    	var nombre = calculNbre();
    	var touche = trouveLettre();
    	var lettre = afficheLettre(touche,nombre);
    	var content = document.getElementById('lettre').value;
    	
    	document.getElementById('lettre').value=lettre;
    	
    	/*if(content == "")
    		document.getElementById('lettre').value=lettre;
    	else
    	{
    		content = content+lettre	
    		document.getElementById('lettre').value = content;
    	}*/
    	//return lettre;
    
    }
    
    
    
     	document.onkeypress = affiche;
     	
    	
    	setTimeout("clearTime()",3000);	
    	
    </script>
    
    </head>
    
    
    <body id="body" style="background-image: none; margin-left: 60px; margin-top: 80px;">
    <div id="div" style="margin-left: 60px;">
    </div>
    
    <input type="hidden" value="-1" id="nbreTouche">
    <input type="text" value="" id="lettre"><br>
    
    </body>
    </html>
    



    Cordialement,
    Jim Truman.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      14 janvier 2009 à 14:47:33

      setTimeout("clearTime()",3000);

      Non. Non. Non. et… Non.


      setTimeout(clearTime,3000);

      Oui. Oui. Oui.


      Et tu codes pour IE uniquement (window.event).
      à la place du if j'aurais mis un switch. Mais bon.

      ( edit ) si tu regardes l'insertion dans un champ, ajoute le gestionnaire d'évènement à ce champ. pas au document.
      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2009 à 14:52:09

        Merci pour le tuyaux ;)

        Par contre cela ne répond pas vraiment à ma question :)
        Dois-je déplacer à chaque fois le curseur vers la droite ?
        Dois-je concaténer les chaînes ?

        [EDIT]

        Citation : Nod_

        ( edit ) si tu regardes l'insertion dans un champ, ajoute le gestionnaire d'évènement à ce champ. pas au document.



        Je n'ai pas trop compris :S comment faire pour l'ajouter au champs ?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          14 janvier 2009 à 14:55:34

          Code propre, les erreurs vont apparaîtes d'elles mêmes.

          dans claculNbre la valeure que tu récupère est une chaine de caractère, il faut utiliser var val = parseInt(val, 10); pour pouvoir l'incrémenter.

          pareil pour ta condition dans afficheLettres (et rajoutes toutes les { } tant que t'y est).


          ( edit )
          au lieu de :

          document.onkeypress = affiche;


          tu fais (c'est perfectible, mais ça suffira pour le moment):

          document.getElementById("lettre").onkeypress = affiche;

          ( edit² ) on voit que c'est la rentrée, ça faisait longtemps les bts…
          • Partager sur Facebook
          • Partager sur Twitter
            14 janvier 2009 à 15:01:23

            ^^ Oui le javascript c'est pas trop ma spécialité donc je viens demander de l'aide sur l'un des meilleurs forum de programmation web du net ;)

            En tout cas merci de ton aide je vais essayer ca :)

            [EDIT]

            document.onkeypress = affiche; me sert à "capturer" la touche sur laquelle j'appuie alors que document.getElementById("lettre").onkeypress= affiche; ne me le permet pas.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              14 janvier 2009 à 15:16:38

              bah si.

              Met le focus sur l'input et je t'assures que tu capture la saisie. C'est fait pour.
              • Partager sur Facebook
              • Partager sur Twitter
                14 janvier 2009 à 15:21:01

                Le problème c'est que si je met le focus sur l'input, quand je vais appuyer sur la touche 1, dans l'input va s'inscrire 1 et non l'équivalence en lettre :S
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  14 janvier 2009 à 15:23:23

                  Mais téas 2 input. Je pensais que tu en avait un pour voir quelles touches tu appuyais et un deuxième pour afficher le résultat.

                  Parceque dans l'état ton input hidden il sert grave à rien. Javascript possède des variables pour faire ça.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 janvier 2009 à 15:24:14

                    J'en ai un qui sert de compteur et l'autre qui affiche le résultat.

                    Je voudrais juste ajouter la lettre après la première si cela est possible.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      14 janvier 2009 à 15:32:29

                      C'est bien ce que je dis, le compteur devrait être une variable, pas une connerie dans un champ <input hidden>.

                      bah au lieu de faire
                      <machin>.value = <talettre>;
                      tu contactène
                      <machin>.value += <talettre>;

                      C'est fun comme projet, si j'ai le temps je te le fait tout propre ce soir.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 janvier 2009 à 15:36:04

                        Ok mais moi je suis ce que mon maitre de stage demande :S
                        Il n'y a donc aucun moyen d'ajouter les lettres les unes à la suite des autres ?

                        En tout cas merci de ta patience et de ton aide.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          14 janvier 2009 à 15:36:51

                          il te le demande pour aujourd'hui?

                          cf. mon post d'avant, j'ai édité

                          erf les maitre de stage. Pas l'air d'être un champion le tiens…

                          (edit) refaire un claver de tel sur un pc… c'est ultra débile. c'est pas pour rien que sur les claviers on a toutes les lettres. Mais c'est fun.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 janvier 2009 à 15:46:08

                            Ben oui c'est comme ca ^^
                            Par contre si je met le += ca me donne l'erreur que j'avais ce matin, c'est à dire que mon input prend la valeur "abc" et non "c" si j'appuie 3 fois sur 2.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              14 janvier 2009 à 15:48:44

                              bah ouais normal, c'est pas une erreur…

                              Bon je re avec le script ce soir quand j'ai le temps, de tt facon si personne viens te filer un coup de main il l'a pas ce soir son script ton maitre de stage :)

                              pas le temps d'expliquer en détails maintenant sry.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 janvier 2009 à 15:52:36

                                Pas de problème je vais essayer encore des choses et je verrais bien. En tout cas merci pour ton aide ;)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  15 janvier 2009 à 0:17:45

                                  Pas testé sous IE. Mais ça devrait marcher.

                                  <html>
                                  <head>
                                  	<title>Test touche</title>
                                  </head>
                                  
                                  <body>
                                      <input type="text" name="lettre" value="" id="lettre">
                                      
                                  
                                  <script>
                                  (function () { // on met ça pour pas polluer l'espace global
                                  
                                  var pad = [ // représentation du clavier
                                          [" ","0"], 
                                          [".",",","1"], 
                                          ["a","b","c","2"], 
                                          ["d","e","f","3"], 
                                          ["g","h","i","4"], 
                                          ["j","k","l","5"], 
                                          ["m","n","o","6"], 
                                          ["p","q","r","s","7"], 
                                          ["t","u","v","8"], 
                                          ["w","x","y","z","9"]
                                      ],// Pratique : index == chiffre tapé
                                      duree = 800, // Le temps dispo pour rentrer le caractère 
                                      
                                      // Fin de la config après c'est pour le script
                                      saisie = null, // ici on met le chiffre tapé pour comparer
                                      index = 0, // nombre de fois où l'on a tappé le chiffre "saisie"
                                      timeout = null, // laisse un temps max pour entrer caractère
                                      champ = document.getElementById("lettre");
                                      
                                      
                                      /**
                                       * On appuie sur une touche :
                                       *  - regarde si c'est un chiffre
                                       *  - détermine le chiffre en question
                                       *  - met en mémoire
                                       *  - compte le nombre de fois où l'on a appuyer
                                       */
                                      champ.onkeydown = function (e) {
                                          var e = e || window.event, // ie de merde
                                              keyCode = e.keyCode || e.which, // ie de merde le retour
                                              // on converti la saisie en chiffre de 0-9 
                                              c = parseInt(String.fromCharCode(keyCode), 10);
                                  
                                          // c'est la merde sinon
                                          if (timeout !== null) {
                                              clearTimeout(timeout);
                                          }
                                  
                                          // la saisie est bien un chiffre 0-9
                                          if (!isNaN(c)) { // yabon
                                              // si on a un caractère en mémoire
                                              // et qu'on a appuyer sur le même
                                              // on va voir les autres caractères sur 
                                              // le chiffre en question
                                              if (saisie !== null && saisie === c) {
                                                  // on incrémente le nombre total d'appuis
                                                  // sur ce chiffre "c" et on boucle sur 
                                                  // les valeurs possible de ce chiffre
                                                  // ici on ne calcul que l'index. Le carac.
                                                  // final c'est en gros : pad[c][index]
                                                  index = (++index) % pad[c].length;
                                              }
                                              else {
                                                  // première fois que l'on appuie sur un chiffre
                                                  // ou saisie différente de la précédente
                                                  index = 0;
                                                  saisie = c;
                                                  // rajoute un espace pour plus tard
                                                  // qui sera remplacé par la lettre ou 
                                                  // ponctuation qu'il faut au onkeyup
                                                  this.value += " ";
                                              }
                                              
                                              // Temps limité pour modifier la saisie
                                              // au bout de "duree" ms d'inactivité, on
                                              // passe au caractère suivant
                                              timeout = window.setTimeout(function () {
                                                  // vide la mémoire du caractère
                                                  // a la prochaine saisie, comme si 
                                                  // c'était un nouveau chiffre
                                                  saisie = null;
                                              }, duree);
                                              
                                              // pour éviter d'afficher le caractère
                                              // saisi il faut retourner false
                                              return false; 
                                          }
                                          else {
                                              // pas appuyer sur un chiffre
                                              // pas de return false;
                                              // il faut pouvoir utiliser ret. arrière
                                              saisie = null;
                                          }
                                      };
                                      
                                      
                                      /**
                                       * On relache la touche : 
                                       * Si on a tapé un chiffre alors on 
                                       * remplace par la bonne valeur en 
                                       * fonction du chiffre et du nombre 
                                       * de fois ou on l'a tapé.
                                       */
                                      champ.onkeyup = function (e) {
                                          var e = e || window.event,
                                              keyCode = e.keyCode || e.which,
                                              // petit raccourci, pas fondamental
                                              val = this.value;
                                              
                                          // si on a un nombre et pas autre chose, 
                                          // on l'affiche dans le texte à la place de
                                          // l'espace que l'on a rajouté ou de la
                                          // lettre que l'on est en train de changer
                                          if (saisie !== null) {
                                              // on coupe le dernier caractère de la chaine
                                              // et on remplace par la valeur contenue dans
                                              // le tableau pad dont le premier index 
                                              // correspond au chiffre que l'on a entré
                                              // le second au nombre de fois ou l'on a 
                                              // appuyer sur la touche
                                              this.value = val.substr(0, val.length - 1) + 
                                                      pad[saisie][index];
                                          }
                                      };
                                      
                                  // oh yeah! \o/
                                  })();</script>
                                  </body>
                                  </html>
                                  


                                  J'suis content de moi, c'était amusant.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 janvier 2009 à 10:30:27

                                    Merci pour ton aide je vais voir tous ca ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      15 janvier 2009 à 17:46:29

                                      yop tu t'en sors?
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Script SMS

                                      × 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