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, время: 11:30. |