Я думаю, что Джейсон Коэн не прав. Положение каретки сохраняется при потере фокуса.
[ Редактировать : Добавлен код для FireFox, которого у меня изначально не было.]
[ Редактировать : Добавлен код для определения самого последнего активного текстового поля.]
Во-первых, вы можете использовать событие onBlur каждого текстового поля, чтобы установить переменную «this», чтобы вы всегда знали самое последнее активное текстовое поле.
Затем, есть способ IE, чтобы получить позицию курсора, который также работает в Opera, и более простой способ в Firefox.
В IE основная концепция заключается в использовании объекта document.selection и вставки некоторого текста в выделения. Затем, используя indexOf, вы можете получить позицию добавленного вами текста.
В FireFox есть метод selectionStart, который даст вам позицию курсора.
Если у вас есть позиция курсора, вы перезаписываете весь текст. Значение с помощью
текст перед позицией курсора + текст, который вы хотите вставить + текст после позиции курсора
Вот пример с отдельными ссылками для IE и FireFox. Вы можете использовать свой любимый метод обнаружения в браузере, чтобы выяснить, какой код запускать.
<html><head></head><body>
<script language="JavaScript">
<!--
var lasttext;
function doinsert_ie() {
var oldtext = lasttext.value;
var marker = "##MARKER##";
lasttext.focus();
var sel = document.selection.createRange();
sel.text = marker;
var tmptext = lasttext.value;
var curpos = tmptext.indexOf(marker);
pretext = oldtext.substring(0,curpos);
posttest = oldtext.substring(curpos,oldtext.length);
lasttext.value = pretext + "|" + posttest;
}
function doinsert_ff() {
var oldtext = lasttext.value;
var curpos = lasttext.selectionStart;
pretext = oldtext.substring(0,curpos);
posttest = oldtext.substring(curpos,oldtext.length);
lasttext.value = pretext + "|" + posttest;
}
-->
</script>
<form name="testform">
<input type="text" name="testtext1" onBlur="lasttext=this;">
<input type="text" name="testtext2" onBlur="lasttext=this;">
<input type="text" name="testtext3" onBlur="lasttext=this;">
</form>
<a href="#" onClick="doinsert_ie();">Insert IE</a>
<br>
<a href="#" onClick="doinsert_ff();">Insert FF</a>
</body></html>
Это также будет работать с textareas. Я не знаю, как переместить курсор, чтобы он оставался в точке вставки.