2010-05-14 18 views
7

Estoy intentando disparar un evento clave por programación para ir a la izquierda en un cuadro de texto, pero sin tener suerte.Presionar mediante programación la tecla "Izquierda" en una entrada de texto

El elemento de entrada tiene el foco y el cursor está al final. Estoy tratando de hacer que el cursor se mueva un paso hacia la izquierda antes de la letra "F" * programáticamente activando un evento del Teclado (Keydown/Keyup/KeyPress) con la correspondiente pulsación ← o → dirigida al cuadro de entrada.

ABCDEF |

Aquí está el código hasta ahora:

HTML

<input id="a" type="text" /> 

Javascript

var keyEvent = document.createEvent("KeyboardEvent"); 

var keyLocation = '0x00'; 
var keyIdentifier = "Left"; 

keyEvent.initKeyboardEvent("keypress", 
         true, 
         true, 
         window, 
         keyIdentifier, 
         keyLocation, 
         false); 

$("a").dispatchEvent(keyEvent); 

ahorrado una demostración rápida de jsFiddle si quieres ver todo el código - http://jsfiddle.net/Vsafv/

No estoy interesado en hacer este navegador cruzado (solo hazlo funcionar en Chrome). Gracias por cualquier ayuda.

Respuesta

9
e = jQuery.Event("keydown"); // define this once in global scope 
e.which = 37; // Some key value 
$("input").trigger(e); 

donde "entrada" es su área de texto

37 - izquierda
38 - hasta
39 - derecho
40 - abajo

Así que cuando graba sus "eventos" graba los valores de las teclas pulsadas.
Estoy seguro de que ya descubierto una manera de hacer esto, pero por si acaso, aquí está una idea de cómo me gustaría abordarlo:

var keysPressed = new Array(); // somewhere in the global scope 
$("input").keydown(function (e) { 
    keysPressed.push(e.which); //adding values to the end of array 
}); 

Esperanza esto ayuda

+0

Gracias por la solución @Raine. He intentado un ejemplo básico con tu código - http://jsfiddle.net/sZL3H/, pero no tuve suerte. – Anurag

8

Y para los que no se están viendo jQuery como la solución a todo :)

De http://blog.josh420.com/archives/2007/10/setting-cursor-position-in-a-textbox-or-textarea-with-javascript.aspx

function setCaretPosition(elemId, caretPos) { 
    var elem = document.getElementById(elemId); 

    if(elem != null) { 
     if(elem.createTextRange) { 
      var range = elem.createTextRange(); 
      range.move('character', caretPos); 
      range.select(); 
     } 
     else { 
      if(elem.selectionStart) { 
       elem.focus(); 
       elem.setSelectionRange(caretPos, caretPos); 
      } 
      else 
       elem.focus(); 
     } 
    } 
} 
+0

Wanted a -1 porque no hay suficiente jQuery: P, pero en serio, gracias por la solución. Puedo mover el cursor alrededor, pero estoy interesado en saber si se puede hacer disparando un evento de teclado como "keydown/keyup/keypress". Por lo que respecta a la razón, estoy escribiendo un script para reproducir las acciones del usuario, y se vuelve trivial si puedo simplemente registrar todos los objetos del evento y enviarlos en un momento posterior. Es mucho más simple que tratar de asignar cada evento a una acción/función apropiada mientras se reproduce como en el caso anterior donde las teclas ← o → se asignan a algo que mueve el cursor. – Anurag

+0

-1 No responde la pregunta de cómo enviar eventos a una entrada de texto. El ejemplo solo funciona para posicionar el cursor en una posición específica, pero no en cómo crear correctamente un evento y cómo hacer que el navegador lo procese. –

+0

@ Aaron, cuando respondí, la pregunta podía interpretarse en el sentido de "cómo mover el cursor hacia la izquierda", y esta es una respuesta perfectamente válida para eso. –

1

Por lo que yo puedo ver , puede hacer:

var pos = document.getElementById("a").length; 
document.getElementById("a").setSelectionRange(pos-1, pos-1); 
Cuestiones relacionadas