gwt - teclado - teclas especiales y sus funciones wikipedia
keyPressEvent.getCharCode() devuelve 0 para todas las teclas especiales como enter, tab, escape, etc. (6)
Mi código:
@Override
public void onKeyPress(KeyPressEvent event)
{
if (event.getCharCode() == KeyCodes.KEY_ENTER)
{
registerButton.click();
}
}
Esto está adjunto a un TextBox, y se dispara cuando presiono enter. event.getCharCode()
es solo cero, no 13
. Cuando presiono tab, es 0
, y cuando presiono escape, es 0
. Argh!
Esto funcionó correctamente ayer, y algo ha cambiado en otro lugar del proyecto para afectar esto, pero no estoy seguro de qué podría ser. Realmente parece que no se han realizado cambios relevantes en el último día.
Si, en cambio, manejo un KeyUpEvent
, esto funciona como se esperaba.
Estoy usando GWT 2.1.0. Gracias por cualquier idea!
GWT 2.5:
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
// Event
}
}
KeyUpHandler se debe utilizar en lugar de KeyPresshandler.
newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
addStock();
}
}
});
Obtuve el mismo problema al actualizar de 2.0.4 a 2.2.1, por lo que parece estar relacionado con el código gwt.
Parte del problema es que KeyPressedEvent representa un evento de pulsación de tecla nativa (es decir, específica del navegador). En el code.google.com/p/google-web-toolkit/issues/… que archivó en este tema, uno de los comentarios dice:
Sin embargo, se espera que "escape" no genere un KeyPressEvent (comportamiento de IE y WebKit); tienes que usar KeyDown o KeyUp para eso. Firefox (y Opera) desafortunadamente dispara muchos más eventos de pulsación de teclas que otros (IE y WebKit, que tienen la implementación más sensata, la que el W3C está a punto de estandarizar en Eventos DOM 3, AFAICT), pero en ese caso getCharCode () es 0 para que pueda ignorarlos con seguridad. La única excepción (puede haber otras) es la tecla "enter". Los eventos clave / char en los navegadores son un desastre que GWT no hace mucho para homogeneizar las cosas (al menos por ahora).
Hasta que se solucione este problema, la mejor opción es utilizar la solución con KeyDownHandler o KeyUpHandler.
Podrían cambiar el comportamiento en FF. Estoy usando GWT 2.4.0 y Firefox 10. De acuerdo con este comment , debes usar algo como lo siguiente antes de solucionar el problema:
@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.
}
}
o puedes probar esto
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
KeyPressHandler
se usa, por ejemplo, para las teclas MAYÚSCULAS , CTRL , ALT .
Si desea adjuntar un evento a otra clave, debe usar KeyDownHandler
.
nameField.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
Window.alert("hello");
}
}
});