Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajouter un onKeyDown sur un input

Sujet résolu
    7 octobre 2009 à 11:22:36

    Bonjour,

    Je suis en train de créer un formulaire et d'ajouter du javascript pour améliorer l'ergonomie de ma page.

    A la fin d'un tableau, j'ai une ligne avec 2 input, un pour le prix, l'autre pour la quantité :

    Image utilisateur

    Je veux pouvoir remplir rapidement ce formulaire tout au clavier :
    - je tape le nombre d'exemplaire
    - j'appuie sur tab pour passer au champ suivant
    - je tappe le prix
    - Je souhaite qu'un nouvel appuie sur tab crée une nouvelle ligne (la même fonction que quand je clic sur "Ajouter une quantité")

    Sur la premiere ligne où j'ai mon input en dur, ça n'est pas très compliqué :

    <input type="text" name="prix" id="prix" onKeyDown="if(event.keyCode==9){ajouterligne();}" />
    


    et ça marche bien. :)

    Par contre, pour les lignes suivantes, je ne sais pas ajouter ce onKeyDown sur le nouvel input que je crée comme ça :

    function ajouterligne()
    {
    // [...] Je vous épargne le reste du script qui ne pose pas de problème
    var prixInput = document.createElement('input');
    prixInput.name = 'prix'+ligne;
    prixInput.id = 'prix'+ligne;
    prixInput.type = 'text';
    prixInput.value = 'prix';
    // La ligne qui me pose problème est celle-ci :
    prixInput.onKeyDown = 'if(event.keyCode==9){ajouterligne();}'
    newCell.appendChild(prixInput);
    // [...]
    }
    

    Est-ce que quelqu'un saurait m'indiquer une piste ? :euh:
    • Partager sur Facebook
    • Partager sur Twitter
      7 octobre 2009 à 11:46:37

      c'est quoi le "ligne" dans ta fonction ?
      • Partager sur Facebook
      • Partager sur Twitter
        7 octobre 2009 à 12:37:28

        une variable global qui compte au fur et a mesure je suppose :)

        prixInput.onkeydown = function() {
        	if (event.keyCode == 9) {
        		ajouterligne();
        	}
        };
        
        • Partager sur Facebook
        • Partager sur Twitter
          7 octobre 2009 à 12:51:45

          et faudrait l'incrémenter quelque part :-°
          • Partager sur Facebook
          • Partager sur Twitter
            7 octobre 2009 à 13:08:58

            Oui, la variable ligne permet différencier mes inputs quand j'ai plusieurs ligne avec des input. C'est juste un entier qui s'incrémente ailleurs dans la fonction que je n'ai pas copier en entier.

            Sinon, La solution de Tiller ne fonctionne pas tout à fait, mais merci, ça me donne l'impression d'avancer. Plus précisement event.keyCode ne renvoie rien ou du moins la console firebug me dit : "event is not defined"

            Et du coup, je cale à nouveau. Je ne comprends pas pourquoi event est vu comme une variable quelconque.

            Je reste preneur de toutes suggestions. :-°
            • Partager sur Facebook
            • Partager sur Twitter
              7 octobre 2009 à 13:16:26

              event ne fonctionne pas sur tous les navigateurs...
              window.event pour IE et pour FF, je crois qu'il faut le mettre en paramètre.
              • Partager sur Facebook
              • Partager sur Twitter
                7 octobre 2009 à 13:37:09

                pour reprendre la fonction de Tiller:
                prixInput.onkeydown = function(event) {
                	var e = event || window.event; //pour que ça puisse à la fois marcher sous IE et sous tous les autres
                	if (e.keyCode == 9) {
                		ajouterligne();
                	}
                };
                
                • Partager sur Facebook
                • Partager sur Twitter
                  7 octobre 2009 à 13:42:35

                  il faut pas le faire avec une closure ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 octobre 2009 à 15:05:38

                    Merci beaucoup à Tiller et restimel. A vous deux vous avez trouvé la solution qui fonctionne. :D
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Ajouter un onKeyDown sur un input

                    × 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