2010-11-06 25 views
32

我的代碼:keyPressEvent.getCharCode()像輸入,標籤,逃避所有特殊鍵返回0,等等

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

這是連接到一個文本框,當我按下ENTER它火。 event.getCharCode()只是零,而不是13。當我按標籤時,它是0,當我按下轉義鍵時,它是0。哎呀!

昨天工作正常,項目中的其他地方發生了一些變化,影響了這一點 - 但我不確定它會發生什麼。看起來在最後一天沒有做出相關變化。

如果我處理KeyUpEvent,則按預期工作。

我正在使用GWT 2.1.0。感謝您的任何想法!

+0

這部分看起來是正確的,你可以添加其餘的代碼嗎? – 2010-11-08 18:16:13

+1

要隔離問題,我創建了一個帶有Eclipse插件的示例應用程序,並將KeyPressHandler添加到它創建的TextBox中......同樣的問題!我在http://code.google.com/p/google-web-toolkit/issues/detail?id=5558&q=rileylark&colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Stars – 2010-11-08 19:48:56

+0

上提交了一個bug,您需要關鍵事件。 – dlamblin 2010-11-12 00:24:30

回答

39

KeyPressHandler用於例如用於SHIFTCTRLALT密鑰。

如果你想附加一個事件到另一個鍵,你必須使用KeyDownHandler

nameField.addKeyDownHandler(new KeyDownHandler() { 

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

    } 

}); 
+1

這對我有效,謝謝。我使用的是KeyPressEvent,它在IE和Chrome中檢測到「enter」鍵正確,但在Firefox中沒有(它返回「0」)。但是這個解決方案爲我工作。 – Michael 2011-10-05 17:23:00

+0

是的,KeyPressEvent(也沒有getNativeKeyCode)在Internet Explorer和Chrome上爲我工作,但不是Firefox [42]。 KeyDownHandler和getnativeKeyCode不需要這麼做。 – cellepo 2015-11-08 23:40:43

+0

但是user2015482的答案確實在FF中有效。這應該是被接受的答案! – cellepo 2015-11-08 23:55:19

9

,或者你可以試試這個

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

這不適合我。我不得不從'KeyPressHandler'切換到'KeyDownHandler'(IE和Chrome工作正常,但Firefox不是)。 – Michael 2011-10-05 18:31:00

+2

儘管被提問者選中,但這並不是對問題最完整,正確的答案。使用@Michaël提供的用於跨瀏覽器功能的答案,而不是使用它。 – 2013-01-25 10:51:49

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使用解決方法。

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

KeyUpHandler應該用來代替KeyPresshandler。

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

這個作品,應該是被接受的答案:它也適用於Firefox。另請參閱http://stackoverflow.com/a/5570608/1357094。 – cellepo 2015-11-08 23:54:28

0

GWT 2。5:

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

感謝您的寫作。這與接受的答案不同嗎? – 2013-02-26 14:14:24