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

Gwt keyPressEvent.getCharCode()为所有特殊键返回0,如enter、tab、escape等,gwt,onkeypress,Gwt,Onkeypress,我的代码: @覆盖 按键时公共无效(按键事件) { if(event.getCharCode()==KeyCodes.KEY\u ENTER) { registerButton.click(); } } 这是附加到一个文本框中的,当我按enter键时它会触发event.getCharCode()只是零,而不是13。当我按tab键时,它是0,当我按escape键时,它是0。啊 这是正常工作昨天,和一些东西已经改变了其他地方的项目,以影响这一点-但我不知道它可能是什么。在最后一天,似乎真的没有做出

我的代码:

@覆盖
按键时公共无效(按键事件)
{
if(event.getCharCode()==KeyCodes.KEY\u ENTER)
{
registerButton.click();
}
}
这是附加到一个文本框中的,当我按enter键时它会触发
event.getCharCode()
只是零,而不是
13
。当我按tab键时,它是
0
,当我按escape键时,它是
0
。啊

这是正常工作昨天,和一些东西已经改变了其他地方的项目,以影响这一点-但我不知道它可能是什么。在最后一天,似乎真的没有做出任何相关的改变

相反,如果我处理一个
KeyUpEvent
,它将按预期工作


我正在使用GWT2.1.0。谢谢你的建议

按键处理程序例如用于SHIFT、CTRL、ALT键

如果要将事件附加到另一个键,则必须使用
KeyDownHandler

nameField.addKeyDownHandler(新的KeyDownHandler(){
@凌驾
public void onKeyDown(KeyDownEvent事件){
if(event.getNativeKeyCode()==KeyCodes.KEY\u ENTER){
Window.alert(“你好”);
}
}
});
或者您可以试试这个

if(event.getNativeEvent().getKeyCode()==KeyCodes.KEY\u ENTER){
}

我在从2.0.4更新到2.2.1时遇到了同样的问题,因此它似乎与gwt代码有关

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

但是,预计“escape”不会生成按键事件(即和WebKit行为);您必须使用KeyDown或keydup进行这些操作。 不幸的是,Firefox(和Opera)触发的按键事件比其他(IE和WebKit,它们有最合理的实现,W3C即将在DOM 3事件中标准化的一个,AFAICT)要多得多,但在这种情况下,getCharCode()为0,因此您可以安全地忽略它们。一个例外(可能还有其他例外)是“回车”键。 浏览器中的Key/char事件非常混乱,GWT在同质化方面做得不多(至少目前是这样)


在解决这一问题之前,最好使用KeyDownHandler或KeyUpHandler解决方案。

它们可能会更改FF上的行为。我正在使用GWT2.4.0和Firefox10。根据这一点,在他们解决问题之前,您应该使用如下内容:

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

应使用KeyUpHandler而不是KeyPresshandler

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

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

这部分似乎是正确的,你能添加其余的代码吗?为了解决这个问题,我创建了一个带有Eclipse插件的示例应用程序,并在它创建的文本框中添加了一个按键处理程序。。。同样的问题!我在这里注册了一个bug,谢谢。我使用的是KeyPressEvent,它在IE和Chrome中检测到了正确的“回车”键,但在Firefox中没有检测到(返回“0”)。但是这个解决方案对我有效。是的,KeyPressEvent(没有getNativeKeyCode)在internet explorer和chrome上对我有效,但在firefox上不行[42]。KeyDownHandler和getnativeKeyCode没有必要达到这个程度。但是user2015482的答案在FF中确实有效。这应该是公认的答案!这对我不起作用。我不得不从
KeyPressHandler
切换到
KeyDownHandler
(IE和Chrome都很好,但Firefox不是)。尽管被asker选中,但这并不是这个问题最完整、最正确的答案。用户可以使用@Michaël为跨浏览器功能提供的答案,而不是使用此选项。感谢您的写作。这与公认的答案不同吗?这是可行的,而且应该是公认的答案:它在Firefox上也有效。另见。