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 !

265voto

ebynum Points 1475

Vous pouvez déclencher n'importe lequel de ces événements en les appelant directement, comme ceci :

$(function() {
    $('item').keydown();
    $('item').keypress();
    $('item').keyup();
    $('item').blur();
});

Est-ce que ça fait ce que vous essayez de faire ?

Vous devriez probablement aussi déclencher .focus() et potentiellement .change()

Si vous voulez déclencher les événements de touche avec des touches spécifiques, vous pouvez le faire comme suit :

$(function() {
    var e = $.Event('keypress');
    e.which = 65; // Character 'A'
    $('item').trigger(e);
});

Il y a une discussion intéressante sur les événements liés à la pression des touches ici : jQuery Event Keypress : Quelle touche a été pressée ? en particulier en ce qui concerne la compatibilité entre navigateurs avec la propriété .which.

5 votes

Ou $('item').trigger('keypress', {which: 'A'.charCodeAt(0)});

1 votes

@ebynum Pouvez-vous écrire un code avec Javascript (pas de jquery).

2 votes

Si vous avez besoin de Ctrl : ctrlKey: true aussi : shiftKey , altKey

97voto

aljgom Points 1116

Vous pourriez envoyer des événements comme

el.dispatchEvent(new Event('focus'));
el.dispatchEvent(new KeyboardEvent('keypress',{'key':'a'}));

6 votes

Ou el.dispatchEvent(new Event('keypress', {keyCode: 'a'}))

3 votes

@Cuzox pourquoi ne pas utiliser KeyboardEvent ? Il remplit automatiquement les valeurs comme shiftKey et c'est la bonne méthode. De plus, vous mettez une chaîne dans keyCode, c'est faux.

9 votes

Si vous avez besoin Ctrl : el.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70, ctrlKey: true })); (Cela provoquera un raccourci Ctrl + F )

34voto

cloakedninjas Points 1251

Pour déclencher une pression sur une touche, j'ai dû modifier la réponse @ebynum, plus précisément, en utilisant la propriété keyCode.

e = $.Event('keyup');
e.keyCode= 13; // enter
$('input').trigger(e);

2 votes

keydown n'est pas attrapé, ou est-ce que je fais quelque chose de mal ici ? fiddle.jshell.net/Palestinien/8d8J9

0 votes

@cloak : ça marche. Vérifiez mon commentaire ici pour un sélecteur complet pour fixer les contrôles asp.net : codeproject.com/Tips/269388/ Assurez-vous de l'appeler après avoir inséré quoi que ce soit dans le domaine si vous utilisez Ajax.

27voto

Sionnach733 Points 1831

Voici un exemple de vanilla js pour déclencher n'importe quel événement :

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

9 votes

Pouvez-vous fournir quelques exemples d'utilisation ? Comment votre fonction pourrait-elle être utilisée pour envoyer un code clé ?

9 votes

Le code source de ce poste peut être trouvé au lien suivant qui inclut la documentation : plainjs.com/javascript/events/trigger-an-event-11

25voto

JSON C11 Points 3146

Vous pouvez y parvenir avec : EventTarget.dispatchEvent(event) et en passant un nouveau KeyboardEvent comme événement.

Par exemple : element.dispatchEvent(new KeyboardEvent('keypress', {'key': 'a'}))

Exemple de travail :

// get the element in question
const input = document.getElementsByTagName("input")[0];

// focus on the input element
input.focus();

// add event listeners to the input element
input.addEventListener('keypress', (event) => {
  console.log("You have pressed key: ", event.key);
});

input.addEventListener('keydown', (event) => {
  console.log(`key: ${event.key} has been pressed down`);
});

input.addEventListener('keyup', (event) => {
  console.log(`key: ${event.key} has been released`);
});

// dispatch keyboard events
input.dispatchEvent(new KeyboardEvent('keypress',  {'key':'h'}));
input.dispatchEvent(new KeyboardEvent('keydown',  {'key':'e'}));
input.dispatchEvent(new KeyboardEvent('keyup', {'key':'y'}));

<input type="text" placeholder="foo" />

MDN dispatchEvent

MDN KeyboardEvent

0 votes

L'extrait de code ne fonctionne pas sur Chrome - savez-vous pourquoi ?

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