Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/02/2013, 00:35
brnb8626
 
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: calcular fin de linea en textarea

Que Foreros

Aquí les traigo una solución a mi problema, no creo que sea la mejor pero al menos hace lo que necesito,
limitar el texto de un textarea, y que el usuario no pueda escribir mas de lo que se pueda visualizar
Ahora utilizo el evento onkeyup el cual llama al metodo limitaLinea
El método recibe 2 parámetros el id de la caja de texto y el event
por medio del id obtenemos los siguientes valores del textarea
* vlr = El contenido de la caja de texto
* rows = El numero de lineas
* z = El tamaño de la fuente
* w = El ancho de la caja de texto(width)
haciendo un par de operaciones con z y w obtenemos el numero de caracteres
por linea que debe tener la caja de texto

posteriormente realizamos el mismo proceso que se realizaba anteriormente,
solo que esta vez se agrego la parte de limitar los caracteres si estos
superan el total de caracteres visibles en el textarea.
pero una imagen dice mas que mil palabras, asi es que aqui les dejo
el código para que lo analicen y si pueden mejorarlo pues que mejor
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<script type="text/javascript">
    
    function limitaLinea(id, e) {
        key =  e.which ?  e.which :  e.keyCode;
        obj = document.getElementById(id);
        vlr = obj.value;
		vlr = vlr.replace(/\n/gi, "");
		vlr = vlr.replace(/\r/gi, "");
        cnt = 1; cnt2 = 0;
        rows = obj.rows;
        sigue = true;
        w = parseInt(obj.style.width);
        lnmx = parseInt(w / 8.5);
        total = lnmx * rows;
        total=total+(rows-1);        
        if (vlr.length > total) {
            vlr = vlr.substring(0, (lnmx * rows));           
			
            arr = vlr.split('');
            cnt2 = 0;
            vlr = "";           
            for (i = 0; i < arr.length; i++) {
                cnt2++;
                vlr += arr[i];                
                if (cnt2 >= lnmx && cnt < rows) {
                    vlr += "\n";
                    cnt++;
                    cnt2 = 0;
                }
            }
            obj.value = vlr;            
            sigue = false;            
        } else {
            arr = vlr.split('');
			vlr = "";
            for (i = 0; i < arr.length; i++) {
                cnt2++;
                vlr += arr[i];                
                if (cnt2 >= lnmx && cnt < rows) {
                    vlr += "\n";
                    cnt++;
                    cnt2 = 0;
                }
            }
			obj.value = vlr;
            if (cnt >= rows && cnt2 >= lnmx)
                sigue = false;
            else
                sigue = true;
        }       
        if ((key == 13 || key == 10) && cnt >= rows)
            obj.value = vlr.substring(0,total);
        
        if (!sigue)
            obj.value = vlr.substring(0, total);
    }
    
</script>
</head>
<body>
<textarea id="area" onkeyup="limitaLinea(id,event)" rows="3" cols="1" style="width:250px; font-zise:12px"></textarea>
</body>
</html> 
todavía le faltan unos detalles pero ya hace lo principal
espero les sirva o lo puedan mejorar

Última edición por brnb8626; 18/02/2013 a las 16:49