Foros del Web » Programando para Internet » Javascript »

explorer: selección en textarea

Estas en el tema de explorer: selección en textarea en el foro de Javascript en Foros del Web. Hola amigos: Quisiera saber si se puede mantener la selección de un texto (en un textarea) después de cambiar esa selcción con un script. Con ...
  #1 (permalink)  
Antiguo 13/05/2004, 02:56
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
explorer: selección en textarea

Hola amigos:

Quisiera saber si se puede mantener la selección de un texto (en un textarea) después de cambiar esa selcción con un script.

Con Mozilla lo hago mediante selectionStart/End, pero con explorer no consigo mi objetivo.

Es para mi libro de visitas: http://www.pepemolina.com/visitas/visitasPrueba.php

Los scripts están en: http://www.pepemolina.com/visitas/editor.js

La función es ésta:

Código PHP:
function poner_ie(x)    {
    
_formulario;
    if (
f.createTextRange && f.posi)    with(f)    {
        
posi.text x;
        
posi.select();
    }
    
f.focus();

Y el sistema es muy similar al de estos foros, capturando los eventos onchange y onclick del textarea con:

Código PHP:
function datos_ie() {
    
_texto document.selection.createRange().text;
    if (
_formulario.createTextRange)
        
_formulario.posi document.selection.createRange().duplicate();
    return 
true;

Por anticipado muchas gracias

Saludos
  #2 (permalink)  
Antiguo 13/05/2004, 17:01
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola otra vez:

Urgando por msdn me parece que la solución está en "pasteHtml", nunca lo había usado, y no tengo referencias, pero haré algunas pruebas, y veremos...

Saludos
  #3 (permalink)  
Antiguo 15/05/2004, 16:56
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola otra vez:

En esta página encontré una solución que en principio me ha servido... ...:

http://www.intranetjournal.com/ix/msg/56208.html

Se trata de cambiar el principio del rango (el_Rango.moveStart("character", -texto.length)...

En las páginas referenciadas en el primer post está el código completo.

Los arreglos son:
Código PHP:
function poner_ie(x)    {
    
_formulario;    //alert(document.selection)
    
if (f.createTextRange && f.posi)
        
with(f)    {
            var 
actuar = (posi.text == "");
            
posi.text x;
            if (!
actuarposi.moveStart("character", -x.length);
            
posi.select();
        }
    else
        
f.value += x;
    
f.posi.select();

Supongo que el código puede depurarse...

Saludos
  #4 (permalink)  
Antiguo 16/06/2004, 18:54
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
y quien es

quien es _formulario es el nombre de mi formulario, si lo que quiero es pasar el form como parametro tambien que hago entonces?
__________________
Ing. Reynier Pérez Mira
  #5 (permalink)  
Antiguo 17/06/2004, 02:10
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola otra vez:

Reynier: El sistema solo puede usarse en edición de texto, así que no tiene sentido pasar todo el formulario.

Hay un enlace mejor con la explicación del uso (voy a intentar depurarlo un poco más )

Enlace: http://www.pepemolina.com/editor/editor.html

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 05/10/2004, 11:02
Avatar de cvander
Moderador
 
Fecha de Ingreso: abril-2001
Ubicación: Ciudadano del mundo
Mensajes: 13.638
Antigüedad: 23 años, 7 meses
Puntos: 1792
Muy útil el editor que compartes caricatos. Me agrada que es compatible con varios navegadores.
__________________
- Christian Van Der Henst
Platzi
  #7 (permalink)  
Antiguo 05/10/2004, 13:54
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola cvander:

Recuerdo que antes de cambiar a la versión actual del foro lo plantee en administración... y me dijiste que la nueva versión tenía soporte para mozilla (o algo parecido) y me llevé una desilusión cuando en ese tema no había cambiado nada.

Si quisieras adaptar el código a los foros, te ayudaría en lo que pudiese.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 05/10/2004, 14:18
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
Pues me interesa el tema

Hola a ambos:
Estoy muy interesado en el tema pues estoy desarrollando un Portal para los Joven Club de Computacion y Electronica (http://www.jcce.granma.inf.cu) y entre las cosas basicas que posee el mismo esta el Foro de Discusion y un Libro de Visitas, entoces lo que quiero hacer es algo como este Foro, o sea, un buen Foro que contenga BBCode como negrita, cursiva y esas cosas. Entonces lo que necesito saber es como puedo obtener ese codigo JScript del que hablan Uds. y asi mismo el PHP, pues aunque se un poco de PHP todavia no se nada sobre expresiones regulares ni nada por el estilo.

Salu2
__________________
Ing. Reynier Pérez Mira
  #9 (permalink)  
Antiguo 05/10/2004, 14:28
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola Reynier:

Sobre el tema del foro y php poco puedo ayudarte, aunque el código que tengo en mi libro de visitas (si es el que refieres) no tengo problemas en pasártelo (creo que hay un link para bajar el libro: http://www.pepemolina.com/visitas.zip ) aunque supongo que no está actualizado...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 13/10/2005, 20:30
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
Hola

Hola caricatos:
Nuevamente me encuentro por aquí haciendo preguntas como siempre. Bueno la cosa es que he reprogramado el Portal completo (URL en mi firma) y ahora quiero hacer extensible el Libro de Visitas a los navegadores más usados: Firefox (este es el que yo uso), Internet Explorer y Opera. Entonces lo que quiero lograr es lo que tu hiciste con tu Libro de Visitas pero no tengo ni idea de como hacerlo porque se muy poco de JavaScript. En el mio el código funciona casi a la perfección pero con Internet Explorer solamente. Porque digo casi, pues porque la carita siempre me la inserta al final de todo el texto que se halle en el elemento TEXTAREA no siendo eso lo que yo quiero, pues si a ti por ejemplo se te ocurre firmar el Libro de Visitas y te da la gana de poner la carita el principio en vez de al final, que pasaría? Entonces tendrías que copiar y pegar el código BB de la carita para poder llevarla a la posición que tu quieras. Entonces lo lógico sería que la carita se posicionara en la posicion actual del cursor de texto y no al final. Lo otro que quiero ver si es posible hacer es en vez de mostar el código BB mostrar directamente la carita o imagen correspondiente. Es esto posible ??

Este es el código que uso. Será posible adaptarlo para que sirva en Firefox y Mozilla ??
Código PHP:
function getActiveText(selectedtext) {
 
text = (document.all)?document.selection.createRange().text:document.getSelection();
 if (
selectedtext.createTextRange) {
  
selectedtext.caretPos document.selection.createRange().duplicate();
 }
 return 
true;
}

function 
AddText(NewCode){
 if (
LibroDeVisitas.comments.createTextRange && LibroDeVisitas.comments.caretPos) {
   var 
caretPos LibroDeVisitas.comments.caretPos;
   
caretPos.text caretPos.text.charAt(caretPos.text.length 1) == ' ' NewCode ' ' NewCode;
 } else {
   
LibroDeVisitas.comments.value+=NewCode;
 }
 
AddTxt "";
}

function 
AddSmile(thesmilie) {
 
AddSmilie " "+thesmilie+" ";
 
AddText(AddSmilie);

En espera de tus respuestas
Salu2 y gracias por responder anteriormente

PD: Trate de entrar a www.pepemolina.com pero no me dejo, o sea que la pagina no existe.
__________________
Ing. Reynier Pérez Mira
  #11 (permalink)  
Antiguo 14/10/2005, 01:45
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola Reynier:

Estoy hacieno arreglos en mi página, y por ahora no está disponible, aunque algunas cosillas sí... entre ellas el libro de visitas: http://www.pepemolina.com/visitas/comentarios.php y también puse el zip del mismo en la dirección de más arriba, pero es uns versión algo vieja.

También subí el script del editor, pero ahora está en: http://www.pepemolina.com/editor/

Ahí puedes bajarte los scripts de edición y se explica el uso.
Cuando tenga un poco de tiempo subiré la versión del libro actualizada (usando tecnología ajax)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #12 (permalink)  
Antiguo 14/10/2005, 08:20
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
Gracias

Hola caricatos y muchas gracias por responder mi mensaje nuevamente. Resulta que he ido a la web y he estado buscando lo que necesito. Ya me he bajado el script "editor.js" y puesto en el directorio de mis ficheros JS. Bien tambien copie y pegue el código fuente del Libro de Visitas pero leyendo hay algunas cosas que no me quedan muy claras del todo. Por ejemplo tu tienes este código en el evento onLoad de tu pagina:
Código HTML:
 onload="formu = ini_editor(document.forms.editar.opine);
La pregunta es: Si pongo "document.forms" no necesito especificar el nombre del formulario no?

Seguimos. Tambien en el código del Libro de Visitas tienes todo este código:
Código HTML:
function ponEnlaces(texto)	{
	texto = texto.split("[EMAIL]").join("<a href=mailto:").split("[/EMAIL]").join(">EMAIL</a>");
	texto = texto.split("[NEWS]").join("<a href=news:").split("[/NEWS]").join(">NEWS</a>");
	if (texto.split("[URL]").length > 0)
		if (texto.split("http").length == 0) texto = "http://" + texto;
	return texto.split("[URL]").join("<a href=").split("[/URL]").join(">URL</a>");
}

function ponImagen(texto)	{
	return texto.split("[img = ").join("<img src='").split("/]").join("' />"); 
}

function ponTag(texto, Tag)	{
	return texto.split("[" + Tag + "]").join("<" + Tag + ">").split("[/" + Tag + "]").join("</" + Tag + ">"); 
}

function leePrompt(texto, mensaje)	{
	return prompt(texto, mensaje);
}

function leeTag(Tag)	{
	insertor = _lector();
	texto = leePrompt(Tag, insertor);
	if ((Tag == "URL") && (texto.substr(0, 4) != "http")) texto = "http://" + texto;
	return "[" + Tag + "]" + texto + "[/" + Tag + "]";
}

function imagen(cual)	{
	return "[img = " + cual + "/]";
}

var tex;
function limpieza()	{
	document.forms.editar.opine.value = "";
}

function poner(x)	{
	_insertar(formu, x);
}

var emotis = [
	"[:)]",
	"[:(]",
	"[:x]",
	"[BIEN]",
	"[MAL]",
	"[SI]",
	"[NO]",
	"[APLAUSOS]",
	"[MEJORABLE]",
	"[¡A VER!]",
	"[¡DÉJAME PENSAR!]",
	"[FLIPE]",
	"[¡SIN PALABRAS!]"
];

var fichs = [
	"00.gif",
	"01.gif",
	"02.gif",
	"03.gif",
	"04.gif",
	"05.gif",
	"06.gif",
	"07.gif",
	"08.gif",
	"09.gif",
	"10.gif",
	"11.gif",
	"12.gif"
];

function chequote(x)	{
	while (x.indexOf("\"") != -1) x = x.replace("\"", "&34");

}

function salida()	{
	opener.actualizar();
	window.close();
}

function chequeo()	{

//alert("función deshabilitada...");


// Provisionalmente deshabilitado

tex = document.forms.editar.opine.value;
if (tex == "") {alert("Debe poner algún comentario"); return;}
var quien = document.forms.visitas.nombre.value;

while (tex.indexOf("<") != -1)	
	{
		tex = tex.replace("<", "[código insertado:" );
		if (tex.indexOf(">") != -1) tex = tex.replace(">", "]" );
	}
for (var i = 0; i < fichs.length; i ++)
	tex = tex.split(emotis[i]).join("<img src=" + fichs[i] + ">");

document.forms.visitas.tx.value = ponEnlaces(ponTag(ponTag(ponImagen(tex), 'B'), "I"));
var nom = (quien == "") ? " Anónimo" : quien;
document.forms.visitas.nm.value = nom;

var ops = "width=200,height=200,left=" + (screen.width / 2 - 100) + ",top=" + (screen.height / 2 - 100);
var ventana = window.open('', 'actualizando', ops);

document.forms.visitas.submit();
setTimeout("salida()", 2000);

}

function subiendo()	{
	var ops = "status=yes,width=400,height=260,top=" + (screen.height / 2 - 130) + ",left=" + (screen.width / 2 - 200);
	window.open("", "subir", ops);
	document.forms["subir"].submit()
}

function devolver(n)	{
	poner("[img = " + n + " /]");
}

function cuenta()	{
	document.forms.editar.opine.rows = (document.all) ? 10 : 8;
}
De todas esas funciones entiendo muy pocas y no se como adaptarlas para que funcione con mi Libro de Visitas y Forum de Discusión en un futuro. Por ejemplo yo pongo mis caritas con imagenes. Como haría para al dar clic me ponga la carita o el equivalente en código BB en el elemento TEXTAREA según he podido ver tu lo haces mediante JS. Si pudieras exlicar un poco mejor te lo agradecería.

Salu2
__________________
Ing. Reynier Pérez Mira
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 18:41.