Foros del Web » Programando para Internet » Javascript »

Problema con ventana prompt

Estas en el tema de Problema con ventana prompt en el foro de Javascript en Foros del Web. ¿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 ...
  #1 (permalink)  
Antiguo 03/07/2007, 07:13
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
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
  #2 (permalink)  
Antiguo 06/07/2007, 13:28
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Re: Problema con ventana prompt

Bueno, me aleje y volví a retomarlo. Y al final lo he consiguido. Por si a alguien le es útil.

Código HTML:
<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= new Array();
    var i
    var suma = 0
    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 = "[LIST=1]\n";
    var cierra = "[/LIST]";
    txtarea.value =  s1 +  abre + cierra + s3;

    for (i=0; i<=opcion.length; i++) {
    opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
    if ((opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
    var Cursor =  s1.length + abre.length + suma + cierra.length;
    return(Cursor);    
    }
    txtarea.value =  s1 +  abre;
    for (j=0; j<=i; j++) {
    txtarea.value +=  "[*]" + opcion[j] + "\n"; 
    }
    txtarea.value += cierra + s3;
    suma += (opcion[i].length+4);
    }
}

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="t" rows="10" cols="50"></textarea>
<br><br>
<input type="button"  value="LOrdenada" onclick="Lista();" >
</form>
</body>
</html> 
Gracias a todos aquellos que se interesaron por mi post
  #3 (permalink)  
Antiguo 06/07/2007, 13:42
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Re: Problema con ventana prompt

Gracias a ti por regalarnos tu solución.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:43.