2010-05-14 9 views
7

Sto tentando di attivare a livello di codice un evento chiave per andare a sinistra in una casella di testo, ma senza avere fortuna.Programmare in modo programmatico il tasto "Sinistra" in un input di testo

L'elemento di input ha lo stato attivo e il cursore si trova alla fine. Sto cercando di far spostare il cursore a sinistra di un passo - prima della lettera "F" * a livello di programmazione facendo scattare un evento Keyboard (keydown/keyup/keypress) con il tasto corrispondente ← o → mirato alla casella di input.

ABCDEF |

Ecco il codice finora:

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); 

risparmiato un demo veloce su jsfiddle se volete vedere l'intero codice - http://jsfiddle.net/Vsafv/

Non sono interessato a fare questo cross-browser (fallo funzionare in Chrome). Grazie per qualsiasi aiuto.

risposta

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

dove "input" è la tua textarea

37 - sinistra
38 - fino
39 - destra
40 - giù

Quindi, quando si registra i tuoi "eventi" di registrare i valori per i tasti premuti.
Sono sicuro che già trovato un modo per fare questo, ma solo nel caso in cui, ecco un'idea di come avrei affrontarlo:

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

Spero che questo aiuti

+0

Grazie per la soluzione @Raine. Ho provato un esempio di base con il tuo codice: http://jsfiddle.net/sZL3H/, ma non ho avuto fortuna. – Anurag

8

E per coloro che non la visualizzazione jQuery come la soluzione a tutto :)

Da 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

Volevo -1 perché non c'è abbastanza jQuery: P, ma sul serio - grazie per la soluzione. Posso spostare il cursore, ma sono interessato a sapere se è possibile farlo attivando un evento Keyboard come "keydown/keyup/keypress". La ragione è che sto scrivendo uno script per ripetere le azioni degli utenti, e diventa banale se posso solo registrare tutti gli oggetti evento e inviarli in un secondo momento. È molto più semplice che cercare di associare ogni evento a un'azione/funzione appropriata durante la riproduzione come nel caso precedente in cui i tasti ← o → sono associati a qualcosa che sposta il cursore. – Anurag

+0

-1 Non risponde alla domanda su come inviare eventi a un input di testo. L'esempio funziona solo per posizionare il cursore su una posizione specifica ma non su come creare correttamente un evento e su come farlo funzionare. –

+0

@Aaron, quando ho risposto alla domanda si potrebbe interpretare il significato di "come spostare il cursore a sinistra", e questa è una risposta perfettamente valida per questo. –

1

Per quanto posso vedere , puoi fare:

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