Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Mostrar y Ocultar una parte de un div contenteditable y dar foco

Estas en el tema de Mostrar y Ocultar una parte de un div contenteditable y dar foco en el foro de Javascript en Foros del Web. Hola, No consigo que salga del todo bien. Necesito que la parte escrita de gris dentro del div pueda desaparecer si le doy click encima ...
  #1 (permalink)  
Antiguo 25/03/2013, 15:12
 
Fecha de Ingreso: marzo-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta Mostrar y Ocultar una parte de un div contenteditable y dar foco

Hola,

No consigo que salga del todo bien. Necesito que la parte escrita de gris dentro del div pueda desaparecer si le doy click encima y aparecer nuevamente si le doy click fuera. Les dejo el código para que vean como se ve. Lo que no consigo es que aparezca nuevamente si salgo del foco de dicho texto. Lo necesito para IE6 al 8 y necesito que sea editable. Es para que las personas lo rellenen, entonces sirve como guia para que sigan un procedimiento, pero la parte gris debe desaparecer si ya escribieron algo o volver a aparecer si van para otra parte del texto.

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <title></title>
  3.     <meta charset="utf-8">
  4.     <style type="text/css">
  5. #textarea {
  6.     -moz-appearance: textfield-multiline;
  7.     -webkit-appearance: textarea;
  8.     border: 2px solid gray;
  9.     font: medium -moz-fixed;
  10.     font: -webkit-small-control;
  11.     height: 300px;
  12.     overflow: auto;
  13.     padding: 2px;
  14.     resize: both;
  15.     width: 1050px;
  16. }
  17. <script language="javascript">
  18.  
  19. function validaclick(sel){
  20.     var seleccionado=sel;
  21. sel.innerHTML="";
  22. document.getElementById('textarea').focus();
  23. }
  24. </head>
  25.     <div align="left">
  26.     <div id="textarea" align="left" contenteditable>
  27.     <div title="Breve descripción del motivo de la llamada">Consulta del cliente:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">Breve descripción del motivo de la llamada</font></div>
  28.     <div title="Que deduces de la información de las aplicaciones y lo que menciona el cliente">Análisis:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">Que deduces de la información de las aplicaciones y lo que menciona el cliente</font></div>
  29.     <div title="Nº consulta – Nombre – Nº contacto – sacar información de contactos anteriores – CPSA y confirmarlos">Datos iniciales:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">Nº consulta – Nombre – Nº contacto – sacar información de contactos anteriores – CPSA y confirmarlos</font></div>
  30.     <div title="estrecha, 3G, Línea ADSL, ADSL Libre, FTTH">Tipo de producto del cliente:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">estrecha, 3G, Línea ADSL, ADSL Libre, FTTH</font></div>
  31.     <div title="SI: confirmar todos los datos necesarios">Contactos anteriores:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">SI: confirmar todos los datos necesarios</font></div>
  32.     <div title="delante de equipos, jalones, averías, masiva, PC adicional, Reinicio de equipos (hora de sinc)">Comprobaciones iniciales:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">delante de equipos, jalones, averías, masiva, PC adicional, Reinicio de equipos (hora de sinc)</font></div>
  33.     <div title="Pruebas realizadas y seguimiento de Intracat">Desarrollo de la llamada:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">Pruebas realizadas y seguimiento de Intracat</font></div>
  34.     <div title="PC – Consola – S.O. – Tipo de conexión – Router. - Firmware del router: Actualizado o no">Datos Equipos:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">PC – Consola – S.O. – Tipo de conexión – Router. - Firmware del router: Actualizado o no</font></div>
  35.     <div title="Información facilitada al cliente del motivo de la incidencia y como se resolvió">Argumentación:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">Información facilitada al cliente del motivo de la incidencia y como se resolvió</font></div>
  36.     <div title="Si no puedes resolver la incidencia, que podría hacer el cliente para solucionarlo (buscar foros – descargar alguna aplicación – buscar información en Internet - etc.)">Alternativas de solución:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">Si no puedes resolver la incidencia, que podría hacer el cliente para solucionarlo (buscar foros – descargar alguna aplicación – buscar información en Internet - etc.)</font></div>
  37.     <div title="En que termino la llamada (Resuelto – Avería – Espejo – Incidencia con sus equipos – etc.)">Diagnostico Final:&nbsp;<font color=#AAAAAA onclick="validaclick(this)">En que termino la llamada (Resuelto – Avería – Espejo – Incidencia con sus equipos – etc.)</font></div>
  38.     </div>
  39.     </div>
  40. </body>
  41. </html>
  #2 (permalink)  
Antiguo 25/03/2013, 16:18
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Mostrar y Ocultar una parte de un div contenteditable y dar foco

Hay algo que no me queda claro, hay que restablecer todo el texto?
A ver si esto te sirve, primero, permitime reemplazar esos obsoletos tag font por uns span.
Luego, al cargar la página , guardamos el texto original en una variable
Código Javascript:
Ver original
  1. window.onload = function(){
  2. texto_original = document.getElementById('textarea').innerHTML;
  3. }
la cual previamente declaramos en forma global al inicio de l script. Luego, en tu div contenedora

Código HTML:
Ver original
  1. <div id="textarea" align="left" contenteditable onblur="this.innerHTML= texto_original;";>

Y nos queda
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <title></title>
  3.     <meta charset="utf-8">
  4.     <style type="text/css">
  5. #textarea {
  6.     -moz-appearance: textfield-multiline;
  7.     -webkit-appearance: textarea;
  8.     border: 2px solid gray;
  9.     font: medium -moz-fixed;
  10.     font: -webkit-small-control;
  11.     height: 300px;
  12.     overflow: auto;
  13.     padding: 2px;
  14.     resize: both;
  15.     width: 1050px;
  16. }
  17. span.aaa{
  18. color: #AAAAAA;
  19. }
  20. <script language="javascript">
  21. var texto_original;
  22. function validaclick(sel){
  23. var seleccionado=sel;
  24. sel.innerHTML="";
  25. document.getElementById('textarea').focus();
  26. }
  27.  
  28. window.onload = function(){
  29. texto_original = document.getElementById('textarea').innerHTML;
  30. }
  31.  
  32.  
  33. </head>
  34.     <div align="left">
  35.     <div id="textarea" align="left" contenteditable onblur="this.innerHTML= texto_original;";>
  36.     <div title="Breve descripción del motivo de la llamada">Consulta del cliente:&nbsp;<span class="aaa" onclick="validaclick(this)">Breve descripción del motivo de la llamada</span></div>
  37.     <div title="Que deduces de la información de las aplicaciones y lo que menciona el cliente">Análisis:&nbsp;<span class="aaa" onclick="validaclick(this)">Que deduces de la información de las aplicaciones y lo que menciona el cliente</span></div>
  38.     <div title="Nº consulta – Nombre – Nº contacto – sacar información de contactos anteriores – CPSA y confirmarlos">Datos iniciales:&nbsp;<span class="aaa" onclick="validaclick(this)">Nº consulta – Nombre – Nº contacto – sacar información de contactos anteriores – CPSA y confirmarlos</span></div>
  39.     <div title="estrecha, 3G, Línea ADSL, ADSL Libre, FTTH">Tipo de producto del cliente:&nbsp;<span class="aaa" onclick="validaclick(this)">estrecha, 3G, Línea ADSL, ADSL Libre, FTTH</span></div>
  40.     <div title="SI: confirmar todos los datos necesarios">Contactos anteriores:&nbsp;<span class="aaa" onclick="validaclick(this)">SI: confirmar todos los datos necesarios</span></div>
  41.     <div title="delante de equipos, jalones, averías, masiva, PC adicional, Reinicio de equipos (hora de sinc)">Comprobaciones iniciales:&nbsp;<span class="aaa" onclick="validaclick(this)">delante de equipos, jalones, averías, masiva, PC adicional, Reinicio de equipos (hora de sinc)</span></div>
  42.     <div title="Pruebas realizadas y seguimiento de Intracat">Desarrollo de la llamada:&nbsp;<span class="aaa" onclick="validaclick(this)">Pruebas realizadas y seguimiento de Intracat</span></div>
  43.     <div title="PC – Consola – S.O. – Tipo de conexión – Router. - Firmware del router: Actualizado o no">Datos Equipos:&nbsp;<span class="aaa" onclick="validaclick(this)">PC – Consola – S.O. – Tipo de conexión – Router. - Firmware del router: Actualizado o no</span></div>
  44.     <div title="Información facilitada al cliente del motivo de la incidencia y como se resolvió">Argumentación:&nbsp;<span class="aaa" onclick="validaclick(this)">Información facilitada al cliente del motivo de la incidencia y como se resolvió</span></div>
  45.     <div title="Si no puedes resolver la incidencia, que podría hacer el cliente para solucionarlo (buscar foros – descargar alguna aplicación – buscar información en Internet - etc.)">Alternativas de solución:&nbsp;<span class="aaa" onclick="validaclick(this)">Si no puedes resolver la incidencia, que podría hacer el cliente para solucionarlo (buscar foros – descargar alguna aplicación – buscar información en Internet - etc.)</span></div>
  46.     <div title="En que termino la llamada (Resuelto – Avería – Espejo – Incidencia con sus equipos – etc.)">Diagnostico Final:&nbsp;<span class="aaa" onclick="validaclick(this)">En que termino la llamada (Resuelto – Avería – Espejo – Incidencia con sus equipos – etc.)</span></div>
  47.     </div>
  48.     </div>
  49. </body>
  50. </html>

En IE 7/8/9 funciona, en el 6, no tengo forma de probarlo

Saludos y Bienvenido a Foros del Web
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 26/03/2013, 02:48
 
Fecha de Ingreso: marzo-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Mostrar y Ocultar una parte de un div contenteditable y dar foco

Hola emprear, disculpa por no haber sido más específico. Lo que deseo es que si en la primera línea, alguien le da click al texto en gris (#AAAAAA), entonces desaparezca el texto gris de dicha línea(lo cual ya esta), ahora si en ese momento deseo saltar o irme a otra línea, por ejemplo si no escribí nada en la primera línea y me voy a la segunda línea (le doy click), entonces me vuelva a aparecer lo que estaba escrito en gris en la primera línea, además me desaparezca lo gris de la 2da línea y quede el foco en la 2da línea parte gris.
Y así con cada div o línea de forma independiente. He intentado guardar el texto de cada span en la función que llama el onload y luego llamar al onblur en cada span para reponer su texto cuando esté fuera o en otra línea, pero no me sale.

No quiero que me reponga todo el texto gris del textarea, solo que me reponga de aquel span en el que no haya escrito nada y solo cuando esté fuera del foco.

Necesito que esta pequeña página sirva como guía a chicos que seguirán unos pasos Paso1, Paso2, etc, los cuales pueden saltearse. Pero esos espacios gris son editables, por lo que no quiero que el texto se reponga si ya han escrito algo en determinada línea.

Si deseas alguna info adicional o no me expliqué bien me avisan. Gracias por tu tiempo.

He puesto el código más simple, ya que solo quiero la idea y yo me las arreglo con el resto:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <title></title>
  3.     <meta charset="utf-8">
  4.     <style type="text/css">
  5. #textarea {
  6.     -moz-appearance: textfield-multiline;
  7.     -webkit-appearance: textarea;
  8.     border: 2px solid gray;
  9.     font: medium -moz-fixed;
  10.     font: -webkit-small-control;
  11.     height: 300px;
  12.     overflow: auto;
  13.     padding: 2px;
  14.     resize: both;
  15.     width: 1050px;
  16. }
  17. span.aaa{
  18. color: #AAAAAA;
  19. }
  20. <script language="javascript">
  21. var texto_original;
  22. function validaclick(sel){
  23. var seleccionado=sel;
  24. sel.innerHTML="";
  25. document.getElementById('textarea').focus();
  26. }
  27.  
  28. window.onload = function(){
  29. texto_original = document.getElementById('textarea').innerHTML;
  30. }
  31. </head>
  32.     <div align="left">
  33.     <div id="textarea" align="left" contenteditable onblur="this.innerHTML= texto_original;";>
  34.     <div>Paso 1:&nbsp;<span class="aaa" onclick="validaclick(this)">Texto guía 1</span></div>
  35.     <div>Paso 2:&nbsp;<span class="aaa" onclick="validaclick(this)">Texto guia 2</span></div>
  36.     <div>Paso 3:&nbsp;<span class="aaa" onclick="validaclick(this)">Texto guia 3</span></div>
  37.     </div>
  38.     </div>
  39. </body>
  40. </html>
  #4 (permalink)  
Antiguo 26/03/2013, 10:38
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Mostrar y Ocultar una parte de un div contenteditable y dar foco

De alguna manera me lo figuraba.
Bueno, no sería tan complicado, vamos a usar 2 funciones, una onclick y otra onblur, y para que capture el onblur, vamos a hacer contenteditable a cada uno de los span individualmente

Al hacer click recupera el valor actual del texto en el span (por defecto linea 1, linea 2, etc) si se han hecho ediciones, recuperará el último texto ingresado, al hacer blur, recorremos todos los span, y al que encuentre con innerHTML == "", le pone el último texto capturado con el click. Como nunca va a haber más de una linea vacía, es evidente que el texto que se capturó va a corresponder a la linea vacía, que es la última que se capturó. Dicho en palabras parece complejo, pero fijate
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <title></title>
  3.     <meta charset="utf-8">
  4.     <style type="text/css">
  5. #textarea {
  6.     -moz-appearance: textfield-multiline;
  7.     -webkit-appearance: textarea;
  8.     border: 2px solid gray;
  9.     font: medium -moz-fixed;
  10.     font: -webkit-small-control;
  11.     height: 300px;
  12.     overflow: auto;
  13.     padding: 2px;
  14.     resize: both;
  15.     width: 1050px;
  16. }
  17. span.aaa{
  18. color: #AAAAAA;
  19. }
  20. <script type="text/javascript">
  21. var texto_original;
  22.  
  23. function validaclick(spa){
  24. texto_original = spa.innerHTML;
  25. spa.innerHTML="";
  26. }
  27.  
  28. function recuperaTexto(){
  29. var contenedor = document.getElementById('textarea');
  30. var losSpan = contenedor.getElementsByTagName('span');
  31.     for (i=0; i<losSpan.length; i++) {
  32.    if(losSpan[i].innerHTML == ""){
  33.    losSpan[i].innerHTML = texto_original;
  34.    }
  35.  
  36.    }
  37. }
  38.  
  39. </head>
  40.     <div align="left">
  41.     <div id="textarea" align="left">
  42.     <div title="Breve descripción del motivo de la llamada">Consulta del cliente:&nbsp;<span contenteditable class="aaa" onclick="validaclick(this)" onblur="recuperaTexto(this);">linea 1</span></div>
  43.     <div title="Que deduces de la información de las aplicaciones y lo que menciona el cliente">Análisis:&nbsp;<span contenteditable class="aaa" onclick="validaclick(this)" onblur="recuperaTexto(this);">linea 2</span></div>
  44.     <div title="Nº consulta – Nombre – Nº contacto – sacar información de contactos anteriores – CPSA y confirmarlos">Datos iniciales:&nbsp;<span contenteditable class="aaa" onclick="validaclick(this)" onblur="recuperaTexto(this);">linea 3</span></div>
  45.     </div>
  46.     </div>
  47. </body>
  48. </html>

Se puede optimizar haciendo un addEventListener para agregar los eventos, pero bueno, así como está funciona. (ie7/8 incluídos)

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 27/04/2013 a las 16:42
  #5 (permalink)  
Antiguo 27/03/2013, 03:48
 
Fecha de Ingreso: marzo-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Mostrar y Ocultar una parte de un div contenteditable y dar foco

Emprear, sos lo máximo.
Gracias por tu pronta respuesta, sos un capo.
Lo has hecho supersencillo y entendible, no sabía bien eso del onblur en los span.
Prometo replicar lo aprendido con el resto de programadores de mi trabajo y con quien pueda o necesite algo similar. Prometo estudiar más javascript que no domino mucho o casi nada.

Una vez más gracias!!!.
  #6 (permalink)  
Antiguo 27/04/2013, 14:15
 
Fecha de Ingreso: octubre-2012
Mensajes: 7
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Mostrar y Ocultar una parte de un div contenteditable y dar foco

Tengo un div contenteditable="true", y bueno necesito posicionar el cursor en una parte determinada del contenido del div, porfavor necesito eso urgente !

Muchas gracias
  #7 (permalink)  
Antiguo 27/04/2013, 14:21
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Mostrar y Ocultar una parte de un div contenteditable y dar foco

Cita:
Iniciado por skumblue Ver Mensaje
Tengo un div contenteditable="true", y bueno necesito posicionar el cursor en una parte determinada del contenido del div, porfavor necesito eso urgente !

Muchas gracias
Las urgencias son para el hospital, y dejá de repetir el tema por todas partes que lo único que vas a conseguir es perjudicarte
http://www.forosdelweb.com/f13/posic...o-div-1048886/
http://www.forosdelweb.com/f13/posic...-input-507927/
http://www.forosdelweb.com/f179/sabe...tarea-1027602/
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: js
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 08:24.