FireFox のテキストエリア内の選択範囲へのスクロールで同様の問題が発生していました。「スペース」を送信してから「バックスペース」文字を送信できませんでした。これは、テキストエリアの選択を上書きするためです。そのため、選択した直後に文字を仮想的に再入力して、選択を強制的に表示するより良い方法を見つけました。
コードは次のとおりです。
function setSelRange(inputEl, selStart, selEnd) {
if (inputEl.createTextRange) {
var range = inputEl.createTextRange();
range.collapse(true);
range.moveEnd('character', selEnd);
range.moveStart('character', selStart);
range.select();
//range.scrollIntoView();
} else if (inputEl.setSelectionRange) {
inputEl.focus();
inputEl.setSelectionRange(selEnd, selEnd + 1);
// ---- Firefox Workaround ----
// Send a virtual key, which is the character immediately after the
// selected text. It justs rewrites the same character so that no unnecessary changes
// are made to the content.
// When the selection is at the end of the textarea, an extra space is appended
// because the inputEl.value.charCodeAt(selEnd) would otherwise cause an error.
var evt = document.createEvent("KeyboardEvent");
if (inputEl.value.length == selEnd) {
evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, 32);
} else {
evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, inputEl.value.charCodeAt(selEnd));
}
inputEl.dispatchEvent(evt);
inputEl.setSelectionRange(selStart, selEnd);
}
}
これがこれを探していた人に役立つことを願っています。私はこれを理解しようとして多くの時間を無駄にしました。