scrollTop до позиции корретки в textareay и textarea.focus
Время доброго.
1) Подскажите, пожалуйста, если известна позиция корретки в textarea, как вычислить на какую высоту прокрутить скролл textarea. После вставки текста под курсор, необходимо прокрутить textarea до окончания вставленного текста. Вставка для ie: textarea.caretPos.text = newtext; (textarea.caretPos = document.selection.createRange().duplicate();) Вставка для opera/ff: textarea.value = textarea.value.substring(0, textarea.selectionEnd) + newtext + textarea.value.substring(textarea.selectionEnd, textarea.value.length) 2) textarea.focus(); – переводит фокус на textarea, но корретка не активизируется, т.е. только пролистывается страница до textarea, а что бы начать ввод, все равно, приходится кликать мышкой в textarea (ie6, opera 10, ff 3). Есть варианты как с этим справится? |
Если я не прав поправьте меня:
После вставки текста под курсор это как? В тексте курсор может только определять позицию точки вставки и вставить под него ничего нельзя. textarea.value = ...не вставляет текст в textarea, а заменяет значение value для FF textarea.setSelectionRange(start,end);используйте оба аргумента одинаковыми для того, чтобы переместить курсор в соответствующую позицию без выделения текста (мой перевод с MDC) для IE найдете сами: moveStart, moveEnd |
Gozar
Немного не так. Тут исходник, а тут работает скрипт (правда регистрация нужна). Для ie текст вставляетcя, а для не ie текст заменяется. И как верно замечено: textarea.setSelectionRange устанавливает карретку в нужную позицию. Дело в том, что после вставки/замены текста, необходимо перевести фокус на textarea, что бы пользователь мог напечатать текст, под только что вставленным/замененным текстом, т.к. это скрипт быстрого цтеирования. И тут у меня беда: 1. Вставленный/замененный текст может "уйти" ниже текущей прокрутки textarea, т.е. окончание вставленного/замененного текста будет не виден. Вопрос, как высчитать на какое значение прокручивать textarea.scrollTop? 2. После вставки/замены текста, передается фокус textarea.focus(), но выполняется только прокрутка страницы до textarea, а карретка не активизируется (ie 6, opera 10, ff 3, может быть это только в моей системе.?). Например, здесь (на этом форуме), в редакции текста, после вставки смайлика, карретка сразуже "мигает" после вставленного смайла - как это организованно? Участок кода, вставляющий текст:
// qq.CaretPos for Opera and FireFox
if (qq.TextArea.selectionStart+1 && qq.TextArea.selectionEnd+1) qq.CaretPos = qq.TextArea.selectionEnd;
var startText = qq.TextArea.value.substring(0, qq.CaretPos).replace(/^(\r*\n)*/g, '').replace(/^\s*/g, '');
var endText = qq.TextArea.value.substring(qq.CaretPos, qq.TextArea.value.length);
// код генерации текста для вставки
//var scrollTop = qq.TextArea.scrollTop;
//var scrollLeft = qq.TextArea.scrollLeft;
// insert text
if (qq.TextArea.caretPos) qq.TextArea.caretPos.text = text;
else if (qq.TextArea.selectionStart+1 && qq.TextArea.selectionEnd+1)
qq.TextArea.value = startText + text + endText;
else qq.TextArea.value += text;
// set caret in textarea
if (navigator.userAgent.toLowerCase().indexOf("gecko") != -1) qq.CaretPos--;
if (window.getSelection || document.getSelection) qq.TextArea.setSelectionRange(qq.CaretPos+text.length, qq.CaretPos+text.length);
//qq.TextArea.scrollTop = scrollTop;
//qq.TextArea.scrollLeft = scrollLeft;
// focus to textarea and qq.CaretPos for IE
if (focus) qq.TextArea.focus();
if (qq.TextArea.caretPos || document.selection) qq.CaretPos += text.length;
И для IE запоминание позиции вставки:
if (document.selection && document.selection.createRange){
var range = document.selection.createRange();
var dpl = range.duplicate();
dpl.moveToElementText(qq.TextArea);
dpl.setEndPoint("EndToEnd", range);
qq.CaretPos = dpl.text.length;
if (range.text.length == 0){
qq.TextArea.caretPos = document.selection.createRange().duplicate();
}else{
range = document.selection.createRange();
range.move('character', range.text.length);
qq.TextArea.caretPos = range.duplicate();
}
}
|
Цитата:
Цитата:
textarea.focus() textarea.setSelectionRange(0,0) устанавливает каретку с МИГАЮЩИМ курсором в начало textarea и в Оpera и в FF замечательно работает и мигает |
| Часовой пояс GMT +3, время: 02:25. |