2009-09-24 10 views
9

Estoy codificando un portal web para un decodificador con un teclado personalizado.¿Enviar llaves por programación al campo de entrada?

¡El teclado tiene la mayoría de las teclas de caracteres estándar pero no retrocede!

Dado que hay algunas otras teclas personalizadas gratuitas, me gustaría asignar una de ellas para retroceder cuando estoy en un campo de entrada o en un área de texto.

La pregunta es: ¿Cómo envío programáticamente un retroceso al campo de entrada?

O para el caso: ¿Cómo envío programáticamente cualquier clave (como una tecla de flecha) al campo de entrada?

+0

Lo sentimos. STB = set top box. – KaptajnKold

Respuesta

2

Si está en un navegador web, no puede falsificar eventos de entrada reales como eventos de teclado y mouse (por razones de seguridad).

Sin embargo, podrá detectar las otras teclas personalizadas presionadas, para que pueda responder al evento onKeyDown para la clave que desea usar y simplemente actualice el campo de entrada cuando detecte que se está presionando ...

+1

Esperaba que no llegara a eso, pero supongo que es la única solución si lo que dices es verdad. – KaptajnKold

+0

Sin duda * puede * crear y enviar eventos. – NickFitz

0

Esto no es exactamente lo que pediste, pero Control-H es lo mismo que un retroceso en la mayoría de los contextos.

+0

¿Qué quiere decir con "pero Control-H", enviar CTRL + H? – erm3nda

+1

En cualquier navegador que haya usado alguna vez, CTRL + H muestra el historial. – PrinceTyke

-2

Use onkeypress y JavaScript. En el script, puede verificar el carácter ingresado que se asigna al retroceso y hacer que realice esa operación en el texto en el campo.

5

Suponiendo que el navegador admita el modelo de evento W3C, puede crear un KeyEvent y enviarlo utilizando el método dispatchEvent del campo de entrada. Hay un example (using MouseEvent) en mozilla.org. También hay algunos más enlaces más where I last answered this question ;-)

ACTUALIZACIÓN: el siguiente código se ha probado en Firefox 3.5 y retrocesos con éxito a través de los caracteres en el campo de texto:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 

<script type="text/javascript"> 

window.onload = function() { 
    var field = document.getElementById("foo"); 
    var button = document.getElementById("bar"); 
    button.addEventListener("click", function(event) { 
     var keyEvent = document.createEvent("KeyboardEvent"); 
     keyEvent.initKeyEvent("keypress", true, true, null, false, false, false, false, 8, 0); 
     field.dispatchEvent(keyEvent); 
    }, false); 
} 

</script> 

</head> 
<body> 
<div> 
<input type="text" id="foo" value="abcdef"> 
<button id="bar" type="button">Fire key event</button> 
</div> 
</body> 
</html> 
+0

¡Agradable! Muchas gracias. – KaptajnKold

+0

¡Ay! Esto no funciona en Opera o Webkit. – KaptajnKold

+0

Parece que WebKit no es compatible con initKeyEvent: veré si puedo encontrar una solución alternativa. – NickFitz

Cuestiones relacionadas