私がやろうとしているのは、キーコードを配列に入れて、後で面白いことをすることです。それで、私はキーストロークをキャプチャし、カレットの位置を取得し、キーコードを配列に配置します(MooToolsの助けを借りて):
var keyArray = [];
$('form').addEvent('keyup', function(event) {
var pos = document.activeElement.getCaretPosition();
keyArray[pos] = event.code;
});
一般的に言えば、これはうまく機能します。undefined
ただし、コンソールに完全な配列を表示すると、配列にいくつかの値があることに気付きました。これをさらに調べてみると、すばやく入力すると、キャレットの位置がわからなくなったり、応答が速い/遅いように見えることがわかりました。これを実証するためにjsfiddleを作成しました:http://jsfiddle.net/HQVR8/1/
この例ですばやく入力すると、次のようなキャレット位置シーケンスが表示されます。
- 1 - 2 - 3 - 5 - 6 - 6.
しかし、ゆっくりと入力すると、
- 1 - 2 - 3 - 4 - 5 - 6.
もちろん、すばやく入力するときの問題はundefined
、配列に値があり、1つの配列項目を上書きすることです。したがって、結果は異なります。
私の質問は、どういうわけかカレットの位置を追跡させることができるかどうかです。selectionStart
代わりに「ネイティブ」を使用してみましたが、結果は同じです。また、イベントでキャレットの位置をキャプチャし、keydown
それをイベントの配列に配置してみkeyup
ました。変わりはない。少し休止する(つまり、ユーザーにゆっくりと入力させる)ことで解決できるかどうか疑問に思っていますが、これはハックのように感じられるので、「適切な」解決策をお勧めします。うまくいけば、1つあります。