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

Résolu
Baptiste_xls Messages postés 15 Statut Membre -  
Baptiste_xls Messages postés 15 Statut Membre -

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. Baptiste_xls Messages postés 15 Statut Membre 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
  2. Totoro
     

    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
    1. Baptiste_xls Messages postés 15 Statut Membre 1
       

      Merci pour votre réponse.

      J'en prend note pour les prochaines fois ;) 

      Baptiste

      0