Foros del Web » Programando para Internet » Javascript »

Problema con Editor de Texto

Estas en el tema de Problema con Editor de Texto en el foro de Javascript en Foros del Web. Hola, otra vez con el mismo problema que expuse hace unas semana. Este código edita texto, en este caso inserta una lista ordenada. Pero no ...
  #1 (permalink)  
Antiguo 03/09/2007, 05:59
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Problema con Editor de Texto

Hola, otra vez con el mismo problema que expuse hace unas semana.
Este código edita texto, en este caso inserta una lista ordenada. Pero no logro que funcione correctamente en IE 5,6,7.
El problema está en que si hay más de un botón en el formulario, no inserta la lista en el lugar donde el cursor está o sobre la porción de texto que has sido seleccionado.
Si por el contrario solo dejo un botón (LORDENADA), funciona perfectamente. ¿Alguién prodría probralo y ver si le ocurre lo mismo?.

Código PHP:
<html>
<
head>
<
title></title>
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<
script langage="javascript" type="text/javascript">
// Comprueba Navegador y Plataforma del pc
var clientPC navigator.userAgent.toLowerCase(); // Coge info cliente
var clientVer parseInt(navigator.appVersion); // Coge versión navegador
var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var 
is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (
clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
                && (
clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var 
is_moz 0;
var 
is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var 
is_mac = (clientPC.indexOf("mac")!=-1);
function 
listaord ()  {
var 
txtarea document.getElementById('texto');
var 
opcion= new Array();
var 
i,j
var suma 0;
var 
Cursor 0;
if ((
clientVer >= 4) && is_ie && is_win) {
var 
theSelection document.selection.createRange().text;
 
// IE 
 
if (document.selection) {
  
txtarea.focus();
  var 
Sel document.selection.createRange();
  
Sel.moveStart ('character', -txtarea.value.length);
  var 
SelEmpz Sel.text.length-2;
  var 
SelLargo txtarea.value.length;
  var 
s1 = (txtarea.value).substring(0,SelEmpz);
  var 
s2 = (txtarea.value).substring(SelEmpz,SelLargo);
  var 
SelFin s1.length theSelection.length -1// caracteres que deja atrás
  
var s1_selec = (txtarea.value).substring(0,SelFin);
  var 
abre "[list=1]\n";
  var 
cierra "[/LIST=]";
  if (!
theSelection) {
  
// Contamos los saltos de linea
  
var cad s1;
  var 
salinea = new String();
  
salinea cad.split("\n"); 
  
alert("texto1 " +s1"\ntexto2 " +s2"\nSaltos " +salinea.length);
  
txtarea.value =  s1 +  abre cierra s2;
  for (
i=0i<=opcion.lengthi++) {
  
opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
  if ((
opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
  
Cursor=  s1.length abre.length suma cierra.length salinea.length 1;
  return(
Cursor); 
  }
  
txtarea.value =  s1 +  abre;
  for (
j=0j<=ij++) {
  
txtarea.value +=  "[*]" opcion[j] + "\n"
  }
  
txtarea.value += cierra s2;
  
suma += (opcion[i].length+4);
  }
 }
  if (
theSelection) {
  
// Contamos los saltos de linea
  
var cad s1_selec;
  var 
salinea = new String();
  
salinea cad.split("\n"); 
  
alert("texto1 " +s1_selec"\ntexto2 " +s2"\nSaltos " +salinea.length);
  
txtarea.value =  s1_selec abre;
  
opcion theSelection.split(" ");
  for (
j=0j<opcion.lengthj++) {
  
txtarea.value +=  "[*]" opcion[j] + "\n"
  
suma += (opcion[j].length+4);
  }
  
txtarea.value += cierra s2;
  var 
Cursor =  s1_selec.length abre.length suma cierra.length salinea.length 1;
  return(
Cursor); 
  }
 }
}
 
 
 
// Firefox 
 
else if (txtarea.selectionStart ||txtarea.selectionStart == '0'
  
SelEmpz txtarea.selectionStart;
 
}
 
function 
PosicionCursor(pos) {
var 
txtarea document.getElementById('texto')
 if(
txtarea.setSelectionRange) {
  
txtarea.focus();
  
txtarea.setSelectionRange(pos,pos);
 }
 else if (
txtarea.createTextRange) {
  var 
rango txtarea.createTextRange();
  
rango.collapse(true);
  
rango.moveEnd('character'pos);
  
rango.moveStart('character'pos);
  
rango.select();
 }
}
function 
InListaOrd()
{
 
 
PosicionCursor(listaord());
}
</script>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<form name="editexto">
<td>
<input type="button"  value="b" />
<input type="button"  value="u" />
<input type="button"  value="i" />
<br>
<input type="button"  value="Left" />
<input type="button"  value="Center"  />
<input type="button"  value="Right" />
<br>
<input type="button"  value="Url"  />
<br>
<input type="button"  value="LORDENADA" onclick="InListaOrd();" />
<br>
<input type="button"  value="Ldesordenada"  />
</td>
</tr>
<tr>
<td><textarea id="texto" name="texto" rows="5" cols="31" colspan="23"></textarea></td>
</form>
</tr>
</table>
</body>
</html> 
Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #2 (permalink)  
Antiguo 05/09/2007, 05:05
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Re: Problema con Editor de Texto

Vamos chic@s, ¿a nadie se le ocurre cuál puede ser el problema o la solución?
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 06/09/2007, 04:24
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Re: Problema con Editor de Texto

Ok, a nadie se le ocurre cuál puede ser la solución. Pero ¿podríais probar el código y decirme si tenéis el mismo problema yo?
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
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 10:18.