creo que Jason Cohen es incorrecta. La posición de intercalación se conserva cuando se pierde el foco.
[Editar : Añadido código para Firefox que no tenía originalmente.]
[Editar :. Añadido código para determinar el cuadro de texto activo más reciente]
En primer lugar, puede usar el evento onBlur de cada cuadro de texto para establecer una variable a "esto" para que siempre conozca el cuadro de texto activo más reciente.
Luego, hay una forma de IE para obtener la posición del cursor que también funciona en Opera, y de una manera más fácil en Firefox.
En IE el concepto básico es utilizar el objeto document.selection y poner algo de texto en la selección. Luego, usando indexOf, puede obtener la posición del texto que ha agregado.
En FireFox, hay un método llamado selectionStart que le dará la posición del cursor.
Una vez que tenga la posición del cursor, se sobrescribe todo el text.value con
texto antes de la posición del cursor + el texto que desea insertar el texto + después de la posición del cursor
Aquí hay un ejemplo con enlaces separados para IE y FireFox. Puede usar su método de detección de navegador favorito para averiguar qué código ejecutar.
<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>
Esto también funcionará con textareas. No sé cómo reposicionar el cursor para que permanezca en el punto de inserción.
No estoy seguro de lo que está tratando de decir. Como muestra mi ejemplo, puede obtener la posición del cursor incluso desde un elemento que no tiene foco. – bmb