210 votes

Déclencher un événement keypress/keydown/keyup en JS/jQuery ?

Quelle est la meilleure façon de simuler un utilisateur qui saisit du texte dans une zone de saisie en JS et/ou jQuery ?

I dont je veux mettre du texte dans la boîte de saisie, je veux juste déclencher tous les événements manipulateurs qui serait normalement déclenché par un utilisateur tapant des informations dans un champ de saisie. C'est-à-dire le focus, le keydown, le keypress, le keyup et le blur. Je pense.

Alors comment faire ?

Merci !

12voto

simonzack Points 2024

Vous êtes maintenant en mesure de le faire :

var e = $.Event("keydown", {keyCode: 64});

2voto

firsthash Points 21

Tout d'abord, je dois dire que l'échantillon de Sionnach733 a fonctionné sans problème. Certains utilisateurs se plaignent de l'absence d'exemples concrets. Voici mon point de vue. J'ai travaillé sur la simulation du clic de la souris lorsque j'utilise ce site : https://www.youtube.com/tv . Vous pouvez ouvrir n'importe quelle vidéo et essayer d'exécuter ce code. Il effectue le passage à la vidéo suivante.

function triggerEvent(el, type, keyCode) {
    if ('createEvent' in document) {
            // modern browsers, IE9+
            var e = document.createEvent('HTMLEvents');
            e.keyCode = keyCode;
            e.initEvent(type, false, true);
            el.dispatchEvent(e);
    } else {
        // IE 8
        var e = document.createEventObject();
        e.keyCode = keyCode;
        e.eventType = type;
        el.fireEvent('on'+e.eventType, e);
    }
}

var nextButton = document.getElementsByClassName('icon-player-next')[0];
triggerEvent(nextButton, 'keyup', 13); // simulate mouse/enter key press

2voto

eugen sunic Points 2937

Pour le script de type, il faut utiliser KeyboardEventInit et fournir l'entier keyCode correct.

const event = new KeyboardEvent("keydown", {
          keyCode: 38,
        } as KeyboardEventInit);

0 votes

L'objet ne correspond pas à l'interface

1voto

Fabien Haddadi Points 388

J'ai pensé attirer votre attention sur le fait que dans le contexte spécifique où un écouteur a été défini dans un plugin jQuery, la seule chose qui a réussi à simuler l'événement keypress pour moi, finalement capturé par cet écouteur, était d'utiliser setTimeout(). Par exemple

setTimeout(function() { $("#txtName").keypress() } , 1000);

Toute utilisation de $("#txtName").keypress() était ignoré bien que placé à la fin de la .ready() function . Aucun supplément particulier du DOM n'était créé de manière asynchrone de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X