keyPressEvent.getCharCode()为所有特殊键返回0,如enter,tab,escape等

时间:2010-11-06 23:42:51

标签: gwt onkeypress

我的代码:

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

这是附加到TextBox,当我按Enter键时它会激活。 event.getCharCode()只是零,而不是13。当我按Tab键时,它是0,当我按下escape时,它是0。哎呀!

昨天这个工作正常,项目中其他地方发生了一些变化,影响了这一点 - 但我不确定它是什么。看起来好像在最后一天没有做出相关的改变。

如果我处理KeyUpEvent,则按预期工作。

我正在使用GWT 2.1.0。谢谢你的任何想法!

6 个答案:

答案 0 :(得分:38)

KeyPressHandler例如用于 SHIFT CTRL ALT 键。

如果您想将活动附加到其他密钥,则必须使用KeyDownHandler

nameField.addKeyDownHandler(new KeyDownHandler() {

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

    }

});

答案 1 :(得分:9)

或者你可以试试这个

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

答案 2 :(得分:4)

应该使用KeyUpHandler而不是KeyPresshandler。

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

答案 3 :(得分:2)

他们可能会改变FF上的行为。我正在使用GWT 2.4.0和Firefox 10.根据这个comment,你应该在解决问题之前使用下面的内容:

@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.
    }
}

答案 4 :(得分:1)

从2.0.4更新到2.2.1时遇到了同样的问题,所以它似乎与gwt代码有关。

部分问题是KeyPressedEvent表示本机(即特定于浏览器)的按键事件。在您就此问题提交的bug中,其中一条评论说:

  

然而,预期“转义”生成KeyPressEvent(IE和WebKit行为);你必须使用KeyDown或KeyUp。   不幸的是,Firefox(和Opera)发布了比其他更多的按键事件(IE和WebKit,它们具有最明智的实现,W3C即将在DOM 3事件中标准化,AFAICT),但在这种情况下,getCharCode()为0所以你可以安全地忽略它们。一个例外(可能还有其他例外)是“输入”键。   浏览器中的键/字符事件是如此混乱,以至于GWT对于使事物同质化没有太大作用(至少目前为止)。

在解决这个问题之前,最好的办法是使用KeyDownHandler或KeyUpHandler的解决方法。

答案 5 :(得分:0)

GWT 2.5:

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