Ответ 1
Я думаю, что Джейсон Коэн неверен. Позиция каретки сохраняется, когда фокус теряется.
[ Изменить: добавлен код для FireFox, который у меня не был первоначально.]
[ Изменить: добавлен код для определения последнего активного текстового поля.]
Во-первых, вы можете использовать каждое текстовое поле onBlur для установки переменной в "this", чтобы вы всегда знали последнее активное текстовое поле.
Затем есть способ IE, чтобы получить позицию курсора, которая также работает в Opera, и более простой способ в Firefox.
В IE основной концепцией является использование объекта document.selection и вставка некоторого текста в выделение. Затем, используя indexOf, вы можете получить позицию добавляемого текста.
В FireFox существует метод под названием selectionStart, который даст вам позицию курсора.
Как только у вас есть позиция курсора, вы переписываете весь текст .value с помощью
перед позицией курсора + текст, который вы хотите вставить + текст после позиции курсора
Вот пример с отдельными ссылками для 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>
Это также будет работать с текстовыми областями. Я не знаю, как переместить курсор, чтобы он оставался в точке ввода.