Ce que j'essaie de faire, c'est de mettre les codes clés dans un tableau, pour faire des choses intéressantes plus tard. Je capture donc les frappes, j'obtiens la position du curseur et je place le code de la touche dans le tableau (avec l'aide de MooTools) :
var keyArray = [];
$('form').addEvent('keyup', function(event) {
var pos = document.activeElement.getCaretPosition();
keyArray[pos] = event.code;
});
D'une manière générale, cela fonctionne très bien. Cependant, j'ai remarqué quelques undefined
dans mon tableau lorsque j'affiche le tableau complet dans ma console. En approfondissant la question, j'ai découvert que lorsque l'on tape rapidement, la position du caret semble perdre le fil, ou être rapide/lent à répondre. J'ai créé un jsfiddle pour démontrer cela : http://jsfiddle.net/HQVR8/1/
Si vous tapez rapidement dans cet exemple, vous obtiendrez une séquence de position du curseur comme suit
- 1 - 2 - 3 - 5 - 6 - 6.
Mais lorsque l'on tape lentement, c'est
- 1 - 2 - 3 - 4 - 5 - 6.
Bien sûr, le problème qui se pose maintenant lorsque je tape rapidement, c'est que j'ai un undefined
dans mon tableau et j'écrase un élément du tableau. Le résultat est donc différent.
Ma question est de savoir si je peux d'une manière ou d'une autre faire en sorte que la position du caret en garde la trace. J'ai essayé d'utiliser la fonction "native" de selectionStart
mais les résultats sont les mêmes. J'ai également essayé de capturer la position du curseur dans un fichier keydown
et de le placer dans un tableau dans la page keyup
événement. Aucune différence. Je me demande si l'utilisation de petites pauses (c'est-à-dire le fait de forcer l'utilisateur à taper plus lentement) pourrait résoudre le problème, mais cela ressemble à un piratage et je préférerais une solution "appropriée". J'espère qu'il y en a une.