¿Qué hay?
Antes de nada he de decir que el código está diseñado para FireFox.
Estoy intentando crear algo de bbcode y me ha surgido un problema que no logro solucionar. Usando una ventana prompt inserto una lista en el textarea (lo tipico), el problema llega cuando quiero insertar dos o más opciones.
Con textarea.value = opcion; la segunda opción se superpone a la primera y la tercera a la segunda y así sucesivamente, como resultado solo se queda impresa en el textarea la última opción.
Si uso textarea.value += opcion; se imprimen todas las opciones que el usuario quiera, pero al final de la cadena.
Con este código consigo que se impriman todas la opciones y en el lugar elegido por el usuario, pero la verdad es que no me acaba de gustar. Es bastante largo y tedioso de explicar el por qué, así que si alguien fuera tan amable de hecharle un vistazo, a ver si me da una solución más elegante.
Código:
<html>
<head>
<title></title>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<script language="JavaScript" type="text/javascript">
function listaord () {
var txtarea = document.getElementById("t");
var opcion = null;
var selLargo = txtarea.textLength;
var selEmpz = txtarea.selectionStart;
var selFin = txtarea.selectionEnd;
var s1 = (txtarea.value).substring(0,selEmpz);
var s2 = (txtarea.value).substring(selEmpz, selFin);
var s3 = (txtarea.value).substring(selFin, selLargo);
var abre = "- \n";
var cierra = "
";
txtarea.value = s1 + abre;
do {
var opcion= prompt("Ingresa los elementos de la lista de uno en uno","");
if ((opcion==null) || (opcion== "undefined") || (opcion=="") || (opcion==' ')) {
txtarea.value += cierra + s3;
txtarea.focus();
return;
}
txtarea.value += "[*]" + opcion + "\n";
//var cur = s1.length + abre.length + 4 + opcion.length;
//return(cur);
}
while ((opcion== null) || (opcion== "undefined") || (opcion != "") || (opcion !=' '))
}
function PosicionCursor(pos) {
var txtarea = document.getElementById("t");
if (txtarea .createTextRange) {
var rango = txtarea .createTextRange();
rango.collapse(true);
rango.moveEnd('character', pos);
rango.moveStart('character', pos);
rango.select();
}
else if (txtarea .setSelectionRange) {
txtarea .focus();
txtarea .setSelectionRange(pos,pos);
}
}
function Lista()
{
PosicionCursor(listaord());
}
</script>
</head>
<body>
<form name="p">
<textarea id="t" name="firma" rows="10" cols="50"></textarea>
<br><br>
<input type="button" value="LOrdenada" onclick="Lista();" >
</form>
</body>
</html>
Gracias