Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/03/2013, 10:38
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 7 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