Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/07/2007, 07:13
Avatar de Adler
Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años, 1 mes
Puntos: 126
Problema con ventana prompt

¿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 = "
  1. \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