web-dev-qa-db-fra.com

Comment simuler la saisie dans un champ de saisie à l'aide de jQuery?

Ce que je veux, c'est simuler la saisie de <input> champ utilisant javascript.

J'ai le code suivant:

var press = jQuery.Event("keydown");
press.ctrlKey = false;
press.which = 65;
$("#test").trigger(press);

Mais quand je charge la page, le #test le champ de saisie n'a pas de caractères dactylographiés, le code clé de '65' représente 'A', mais il n'y a pas d'entrée 'A'.

Fondamentalement, ce que je veux, c'est taper automatiquement le site Web à l'aide de Greasemonkey.

Veuillez me donner quelques idées ou une bibliothèque avec laquelle je peux utiliser pour ce faire.
Merci beaucoup!

39
user1422652

Vous pouvez envoyer des événements clés, et tout ce qui les écoute les obtiendra, mais ils ne changeront pas l'entrée , donc vous ne verrez pas la lettre A apparaît, par exemple. C'est surtout une question de sécurité; voir "Événements de déclenchement manuel" pour une discussion à ce sujet.

Par conséquent, si vous souhaitez que la lettre apparaisse, vous devez modifier la valeur de l'entrée lors de l'envoi de l'événement clé. Il existe un plugin jQuery pour cela, voir "Le $.fn.sendkeys Plugin " .

Vous pouvez voir comment un <input> réagit avec les clés appliquées par l'utilisateur, les événements clés et ce plugin à ce jsFiddle .

Pour référence, ceci est l'élément clé du code de ce jsFiddle:

$("button").click ( function (zEvent) {
    if (zEvent.target.id == "simA_plain") {
        console.log ("Send Plain key event");
        var keyVal = 65;
        $("#eventTarg").trigger ( {
            type: 'keypress', keyCode: keyVal, which: keyVal, charCode: keyVal
        } );
    }
    else {
        console.log ("Use the Plugin to simulate a keystroke");
        $("#eventTarg").sendkeys ("B") ;
    }
} );


Ce plugin devrait être suffisant si vous essayez simplement de "simuler la saisie sur un <input> ". Cependant, selon ce que vous essayez de faire vraiment, vous devrez peut-être effectuer une ou plusieurs des actions suivantes:

  1. Réglez simplement le texte sur ce que vous voulez qu'il soit.
  2. Envoyez un événement keydown, si le javascript de la page se déclenche.
  3. De même, envoyez un événement change, etc., si le javascript de la page se déclenche.
  4. Trouvez et appelez directement le javascript de la page. Utilisez injection de script, le hack d'emplacement, unsafeWindow et/ou @grant none mode pour le faire.
  5. Autre chose? Indiquez votre véritable objectif et créez un lien vers la page cible.
46
Brock Adams