web-dev-qa-db-fra.com

keyPressEvent.getCharCode () retournant pour toutes les clés spéciales telles que enter, tab

Mon code:

@Override
public void onKeyPress(KeyPressEvent event)
{
    if (event.getCharCode() == KeyCodes.KEY_ENTER)
    {
        registerButton.click();
    }
}

Ceci est attaché à une zone de texte et se déclenche lorsque j'appuie sur entrée. event.getCharCode() est juste zéro, pas 13. Lorsque j'appuie sur l'onglet, c'est 0, et quand j'appuie sur echap, c'est 0. Argh!

Cela fonctionnait correctement hier et quelque chose a changé quelque part dans le projet pour le modifier - mais je ne suis pas sûr de ce que cela pourrait être. Il semble vraiment qu'aucun changement pertinent n'a été apporté dans la dernière journée.

Si au lieu de cela je manipule une KeyUpEvent, cela fonctionne comme prévu.

J'utilise GWT 2.1.0. Merci pour toutes les idées!

32
Riley Lark

KeyPressHandlerè usato ad esempio perSHIFT,CTRL,ALTchiavi.

Si vous préférez, c'est un peu comme un enfant, c'est nécessaire d'utiliser KeyDownHandlername__.

nameField.addKeyDownHandler(new KeyDownHandler() {

    @Override
    public void onKeyDown(KeyDownEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            Window.alert("hello");
        }

    }

});
38
Michaël

ou tu peux essayer ça

if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
9
Daniel Cerecedo

KeyUpHandler doit être utilisé à la place de KeyPresshandler.

newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            addStock();
        }
    }
});
4
user2015482

Ils pourraient changer le comportement sur FF. J'utilise GWT 2.4.0 et Firefox 10. Selon comment , vous devriez utiliser quelque chose comme ci-dessous avant de résoudre le problème:

@Override
public void onKeyPress(KeyPressEvent event) {
    int keyCode = event.getUnicodeCharCode();
    if (keyCode == 0) {
        // Probably Firefox
        keyCode = event.getNativeEvent().getKeyCode();
    }
    if (keyCode == KeyCodes.KEY_ENTER) {
        // Do something when Enter is pressed.
    }
}
2
Vin

J'ai eu le même problème lors de la mise à jour de la version 2.0.4 à la version 2.2.1, donc il semble être lié au code gwt. 

Une partie du problème est que KeyPressedEvent représente un événement de pression de touche natif (c'est-à-dire spécifique au navigateur). Dans le bug que vous avez classé sur cette question, l’un des commentaires dit: 

Il est cependant attendu que "escape" ne not génère un événement KeyPressEvent (comportement IE et WebKit); vous devez utiliser KeyDown ou KeyUp pour ceux . Firefox (et Opera) déclenchent malheureusement beaucoup plus d'événements de frappe que d'autres (IE et WebKit, dont l'implémentation est la plus judicieuse, celle que le W3C est sur le point de normaliser dans DOM 3 Events, AFAICT), mais dans ce cas, getCharCode () vaut 0 afin que vous puissiez les ignorer en toute sécurité. La seule exception (il peut y en avoir d'autres) est la touche "Entrée" . Les événements clé/caractère dans les navigateurs sont tellement désordonnés que GWT ne fait pas beaucoup pour homogénéiser les choses (du moins pour le moment).

En attendant que ce désordre soit résolu, votre meilleur choix est d'utiliser la solution de contournement avec KeyDownHandler ou KeyUpHandler.

1
bspoel

GWT 2.5:

public void onKeyPress(KeyPressEvent event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
        // Event
    }
}
0
Sentence