У меня была похожая проблема с прокруткой к выделенной области в текстовой области в 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);
}
}
Надеюсь, это поможет любому, кто искал это. Я потратил много времени, пытаясь понять это.