JavaScript - Simuler la touche "Entrée" sur un input

Résolu

Bonjour à tous, 

J'ai un input sur lequel j'aimerais déclencher la touche entrée à l'aide de JavaScript. 

<input id="codeReservation" type="text" value ="6" onkeypress="showData();">
// Déclenche l'event "Enter" en placant la position sur le input
// puis déclenche l'event grâce à un trigger
    var e = jQuery.Event("keypress");
        e.which = 13 
        e.keyCode = 13
        $('#codeReservation').focus();
        $('#codeReservation').trigger(e);

Voici la fonction associée :

function showData(){
        var e = window.event;
        var k = e.keyCode || e.which;
            if (k == 13)
            {...}
}

Cependant le window.event n'est pas reconnu. (undefined)

Est-ce que quelqu'un pourrait me suggérer une alternative svp ? 

Merci d'avance, 

Baptiste

2 réponses

  1. J'ai mis la condition dans le input et ça a marché.

    <input class="form-control" id="codeReservation" type="text" maxlength="6" size="3" onkeypress="if (event.keyCode == 13) showData()">

    Bonne journée, 

    Baptiste

    1. Salut,

      window.event est en effet déprécié depuis un bail:

      https://developer.mozilla.org/en-US/docs/Web/API/Window/event

      Cela n'a d'ailleurs jamais été une solution correcte vu que son alternative est tellement plus efficace et pratique; la voici:

      https://developer.mozilla.org/fr/docs/Web/API/EventTarget/addEventListener

      Il faut bien entendu supprimer l'attribut onkeypress pour regrouper tout le code dans le javascript(ce qui est mieux) et qui n'a aucun sens relié à un input(vous mettez un input  HTML dans la page pour détecter un événement du clavier plutôt que détecter le clavier directement et si la touche entrée est enfoncée).

      Et remplacer par :

      window.addEventListener("keypress", function(e){
      console.log('code touche enfoncée = '+e.keyCode)
      
      },
      false);
      

      Éventuellement remplacer keypress par keydown qui est plus précis dans la plupart des cas (car keydown détecte/agit quand la touche est enfoncée)et remplacer la fonction anonyme par une fonction nommée pour pouvoir la supprimer si besoin.

      Si vous voulez n'avoir le comportement/event que lorsque l'input est actif il faudra rajouter un event "focus" puis inclure la détection de la touche entrée dans celui ci(en imbriquant les fonctions l'une dans l'autre).

      https://developer.mozilla.org/en-US/docs/Web/API/Element/focus_event

      ps: un input est fait pour être dans un formulaire, cela fonctionnera si ce n'est pas le cas mais reste faux en HTML donc nuit au bon référencement des contenus.

      1. Merci pour votre réponse.

        J'en prend note pour les prochaines fois ;) 

        Baptiste