2010-05-14 4 views
7

J'essaye de déclencher par programmation un événement clé pour aller à gauche dans une zone de texte, mais sans avoir de chance.Appuyez sur la touche "Gauche" dans une entrée de texte par programmation

L'élément d'entrée a le focus et le curseur est à la fin. J'essaye de déplacer le curseur à gauche d'un pas - avant la lettre "F" * par programmation en tirant un événement Keyboard (keydown/keyup/keypress) avec la touche correspondante ← ou → ciblée sur la boîte de saisie.

ABCDEF |

Voici le code à ce jour:

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

sauvé une démonstration rapide sur jsFiddle si vous voulez voir tout le code - http://jsfiddle.net/Vsafv/

Je ne suis pas intéressé à faire ce navigateur croisé (il suffit de le faire fonctionner dans Chrome). Merci pour toute aide.

Répondre

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

où "input" est votre textarea

37 - gauche
38 - jusqu'à 39
- droite
40 - vers le bas

Alors, quand vous enregistrez vos "événements" vous enregistrez les valeurs des touches enfoncées.
Je suis sûr que vous avez déjà trouvé un moyen de le faire, mais juste au cas où, voici une idée de la façon dont je voudrais aborder:

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

Hope this helps

+0

Merci pour la solution @Raine. J'ai essayé un exemple de base avec votre code - http://jsfiddle.net/sZL3H/, mais n'a pas eu de chance. – Anurag

8

Et pour ceux qui ne l'affichage jQuery comme la solution à tout :)

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

Voulu à -1 car il n'y a pas assez jQuery: P, mais sérieusement - merci pour la solution. Je peux déplacer le curseur, mais j'aimerais savoir si cela peut être fait en tirant un événement Keyboard comme "keydown/keyup/keypress". Raison d'être que j'écris un script pour rejouer les actions de l'utilisateur, et il devient trivial si je peux simplement enregistrer tous les objets d'événements, et les envoyer à un point ultérieur. C'est beaucoup plus simple que d'essayer de faire correspondre chaque événement à une action/fonction appropriée tout en rejouant comme dans le cas ci-dessus où les touches ← ou → correspondent à quelque chose qui déplace le curseur. – Anurag

+0

-1 Ne répond pas à la question comment envoyer des événements à une entrée de texte. L'exemple fonctionne simplement pour positionner le curseur sur une position spécifique mais pas comment créer correctement un événement et comment le faire traiter par le navigateur. –

+0

@Aaron, quand j'ai répondu à la question pourrait être interprétée comme signifiant «comment déplacer le curseur vers la gauche», et c'est une réponse parfaitement valide pour cela. –

1

Pour autant que je peux voir , vous pouvez faire:

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