web-dev-qa-db-fra.com

KeyboardEvent dans Chrome, keyCode est

J'essaie de définir keyCode sur un objet événement distribué.

En cliquant sur un bouton, un événement est déclenché sur le contrôle de zone de texte pour simuler un événement keydown. L'événement est déclenché avec succès, mais le code clé est 0. J'ai besoin d'envoyer un objet événement avec le code correct dans la zone de texte .J'ai utilisé le code de ici .

Comment définir la valeur de keyCode dans un événement envoyé?

<html>
    <head>      
    </head>
    <body>
        <input type="button" id="btn" value="Click"></input>
        <input type="text" id="txt"></input>
        <script>
            document.getElementById('btn').addEventListener("click", btnClick);
            document.getElementById('txt').addEventListener("keydown", txtKeydown);         

            function btnClick(e) {
                var txt = document.getElementById('txt');               

                var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) {
                    var e = document.createEvent("KeyboardEvents");
                    e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1));
                    e.keyCode = 83;
                    e.charCode = 0;
                    target.dispatchEvent(e);
                };

                var canceled = !dispatchKeyboardEvent(txt,
                'keydown', true, true,  // type, bubbles, cancelable
                window,  // window
                's',  // key
                0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick
                false, false, false);  // Ctr, Alt, Shift
            }

            function txtKeydown(e) {
                console.dir(e);
                console.log(e.keyCode);
            }

        </script>
    </body>
</html>
25
Andrija Cacanovic

Je suis étonné que ce virus existe depuis des lustres. Il semble y avoir une solution de contournement utilisant des événements génériques. Voici une démo: http://jsbin.com/awenaq/3

36
Philip Nuzhnyy

Il semble que cela fait un peu depuis que vous avez demandé cela, alors vous avez peut-être déjà trouvé la réponse à votre question. Au cas où ce ne serait pas le cas, il y a un bug dans Webkit comme l'a été souligné dans cette SO question qui fait que le code clé est toujours égal à 0. Apparemment, il n'y a pas Vous pouvez faire beaucoup jusqu'à ce qu'ils le réparent. Malheureusement, il ne semble pas que quiconque y travaille vraiment. Ce n'est pas la réponse que vous voulez entendre, mais c'est vraiment la seule réponse que quiconque puisse vous donner pour l'instant.

9
Justin Warkentin

J'ai rencontré le même problème avec les appareils Android comme Sony Xperia et HTC Devices. J'ai donc trouvé une autre solution: référez-vous à ma réponse pour cette question KeyCode renvoie 0 toujours

0
Raghu

Si vous avez jQuery:

$.Event(event, { keyCode: 13 });

Ceci est l'utilisation prévue.
La source .

0
medik

Cela se produit car (comme d'autres l'ont déjà indiqué), l'objet KeyboardEvent (qui utilise charCode au lieu de keyCode) est appelé à la place de l'objet Event. Lorsque vous utilisez:

function txtKeydown(e) {
    console.dir(e);
    console.log(e.keyCode);
}

si vous obtenez un 0 imprimé sur la console, essayez d'utiliser e.charCode au lieu de e.keyCode.

reportez-vous aux documents Web MDN pour plus d'informations sur KeyboardEvent: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent

0
mado