Foros del Web » Programando para Internet » Javascript »

Detectar TextArea vacío

Estas en el tema de Detectar TextArea vacío en el foro de Javascript en Foros del Web. Hola. Tengo un TextArea como este: <textarea cols="85" rows="2" Id="TAestado" onBlur="b(this)"></textarea> Entre otras funciones, este objeto aumenta su numero de rows cada vez que se ...
  #1 (permalink)  
Antiguo 16/12/2009, 16:43
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Exclamación Detectar TextArea vacío

Hola. Tengo un TextArea como este:
<textarea cols="85" rows="2" Id="TAestado" onBlur="b(this)"></textarea>

Entre otras funciones, este objeto aumenta su numero de rows cada vez que se le da a la tecla Enter y decrece su numero de rows cuando presiono la tecla BackSpace.

Lo que quiero conseguir es que cuando cuando saque el foco del objeto (evento onBlur), si en el TextArea solo he introducido "intros" y hayan aumentado su numero de rows, cuando salga de él el número de rows sea igual a 2, el tamaño inicial. Si he introducido aunque sea una sola letra, no quiero que el tamaño varie.

He creado este pequeño script pero no funciona... no sé que puede ocurrir. Alguien me puede ayudar?

Muchas gracias

Código PHP:
function b(campo){
        
    
        
        
        var 
MAX campo.value.length;
        var 
STR campo.value;
        var 
VAL;        
        
        var 
i;
        var 
char;
        for (
i=1i=MAXi1)
        {
            
char Mid(STRi1);
            
            if (
char != '')
            {
                
VAL 1;
                break;
            }
            else
            {
                
VAL 0;    
            }
    

        }
        if (
VAL 1)
        {
            
document.formulario.TAestado.rows 2;
        }
        
        
    
        
//var relleno = campo.value;
        //alert("%" + relleno + "%");
    //    if (campo.value == ' ')
        //{
    //        document.formulario.TAestado.rows = 2;
            //alert('vacidor');
    //    }
    //    alert(campo.value);
        
    

  #2 (permalink)  
Antiguo 16/12/2009, 17:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Detectar TextArea vacío

no he mirado tu codigo por lo que me voy a basar solo por lo que explicas. se me ocurre una expresion regular para detectar los saltos de lineas o cualquier caracter no imprimible (whitespace chars).
Código:
if(/^\s{2,}$/.test(value del textarea))element_textarea.rows = numero filas;
en este caso, la expresion busca si existe alguna coincidencia de dos o mas whitespaces.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 17/12/2009, 06:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Detectar TextArea vacío

Tenias bastantes errores en tu codigo....

Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <title>Documento sin t&iacute;tulo</title>
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4. <script language="JavaScript" type="text/JavaScript">
  5. function alsalir(campo){
  6.         var MAX = campo.value.length;
  7.         var STR = campo.value;
  8.         var VAL=0;        
  9.         var i;
  10.         var char;
  11.         if (MAX!=0){
  12.         for (i=0; i<MAX; i++){
  13.            char = Mid(STR, i, 1);
  14.            if (/^\s/.test(char)){
  15.                VAL = 0;    
  16.            }else{
  17.                VAL = 1;
  18.                break;
  19.            }
  20.        }
  21.     }
  22.        if (VAL == 0){
  23.              alert("No has escrito nada");
  24.            campo.value="";
  25.            campo.rows = 2;
  26.        }else{
  27.              alert("Has escrito algo");
  28.         }
  29.    }
  30. function Mid(str, start, len)
  31. {
  32. // Make sure start and len are within proper bounds
  33.    if (start < 0 || len < 0) return "";
  34.    var iEnd, iLen = String(str).length;
  35.    if (start + len > iLen)
  36.           iEnd = iLen;
  37.     else
  38.           iEnd = start + len;
  39.     return String(str).substring(start,iEnd);
  40. }
  41. </head>
  42. <textarea name="areatexto" cols="25" rows="2" id="areatexto" onBlur="alsalir(this)"></textarea>
  43. </body>
  44. </html>

Errores:

Mid
no es una funcion definida en javascript (igual la tenias en otra parte de tus scripts, te paso una por si no la tenias)

El operador de comparación de igualdad es == no =

Es mucho suponer que char != '' (cadena vacia) sea lo unico que te interesa eleminar... por mucho que aparentemente sea una cadena vacia ''.

Vamos a poner nombres inteligibles a las cosas, que es eso de "function b(campo)"... el nombre debe dar pistas de lo que hace la funcion.

Quim

zerokilled me puedes decir porque funciona igual si uso /^\s/.test(char) o /\s/.test(char)

Última edición por quimfv; 17/12/2009 a las 07:22
  #4 (permalink)  
Antiguo 17/12/2009, 12:32
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Detectar TextArea vacío

el acento circunflejo, o en ingles caret (^), es un ancla que significa "al principio de la cadena". los anclas en las expresiones regulares le indican donde debe comenzar el pareo. sin el caret, la expresion parea desde cualquier posicion que exista un caracter de la clase \s, o sea puede ser un linefeed, espacios, tabular, entre otros. por tanto,
Código:
// devuelve true, notese que la cadena comienza con un espacio;
/^\s/.test(" una cadena");

// devuelve false, no comienza con un whitespace char;
/^\s/.test("una cadena"); 

// devuelve true, existe un whitespace char en la cadena;
/\s/.test("una cadena");
una referencia que le puede ser util, http://www.regular-expressions.info/anchors.html
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 17/12/2009, 13:38
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Detectar TextArea vacío

Gracias. Ahora si que funciona, pero si lo añado a mi proyecto entra en conflicto con otros javascript.

Como dije antes, el textarea aumenta su numero de rows cada vez que se le da a la tecla Enter y decrece su numero de rows cuando presiono la tecla BackSpace. Para ello uso el plugin jQuery
http://www.unwrongest.com/projects/elastic/

No hace lo del código que me habéis puesto y no consigo hacer que funcione... me estoy desesperando bastante. Alguien me ayuda?
  #6 (permalink)  
Antiguo 18/12/2009, 01:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Detectar TextArea vacío

Gracias zerokilled con tu explicacion esta claro que en este caso es absolutamente equivalente puesto que estamos comparando con un solo caracter....


Cita:
Gracias. Ahora si que funciona, pero si lo añado a mi proyecto entra en conflicto con otros javascript.
???

Que conflicto tienes... dinos el error...


Esto funciona... creo

Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <title>Documento sin t&iacute;tulo</title>
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4. <script language="JavaScript" type="text/JavaScript">
  5. var enterant=false;
  6. function estiraiarronsa(e,obj){
  7.     (e.keyCode) ? k=e.keyCode : k=e.which;
  8.     alert(k);
  9.     if(k==8 && enterant==true){
  10.         obj.rows--;
  11.     }
  12.     if(k==13){
  13.         obj.rows++;
  14.         enterant=true;
  15.     }else{
  16.         enterant=false;
  17.     }
  18. }
  19.  
  20. function alsalir(campo){
  21.         var MAX = campo.value.length;
  22.         var STR = campo.value;
  23.         var VAL=0;        
  24.         var i;
  25.         var char;
  26.         if (MAX!=0){
  27.         for (i=0; i<MAX; i++){
  28.            char = Mid(STR, i, 1);
  29.            if (/^\s/.test(char)){
  30.                VAL = 0;    
  31.            }else{
  32.                VAL = 1;
  33.                break;
  34.            }
  35.        }
  36.    }
  37.        if (VAL == 0){
  38.             alert("No has escrito nada");
  39.            campo.value="";
  40.            campo.rows = 2;
  41.        }else{
  42.             alert("Has escrito algo");
  43.        }
  44.    }
  45. function Mid(str, start, len)
  46. {
  47. // Make sure start and len are within proper bounds
  48.    if (start < 0 || len < 0) return "";
  49.    var iEnd, iLen = String(str).length;
  50.    if (start + len > iLen)
  51.           iEnd = iLen;
  52.     else
  53.           iEnd = start + len;
  54.     return String(str).substring(start,iEnd);
  55. }
  56. </head>
  57. <textarea name="areatexto" cols="25" rows="2" id="areatexto" onBlur="alsalir(this)" onKeyUp="estiraiarronsa(event,this);"></textarea>
  58. </body>
  59. </html>




Quim

Última edición por quimfv; 18/12/2009 a las 01:59
  #7 (permalink)  
Antiguo 19/12/2009, 09:04
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Detectar TextArea vacío

ya lo arreglé. Eliminé el plugin elastic de jQuery y usé un código más imple y corto:


Código HTML:
Ver original
  1. // JavaScript Document
  2.     //agrandar TextArea
  3.     function agrandar(){
  4.        
  5.         area=document.forms['formulario'].TAestado.value;
  6.         lineas=area.split("\n");
  7.         for(i in lineas){
  8.             var ubound=i;
  9.         }
  10.         //alert(ubound);
  11.             ubound=new Number(ubound)+1;
  12.             if (ubound>10){
  13.                 document.forms['formulario'].TAestado.rows=10;
  14.                 document.getElementById('TAestado').className="TAestadoMax";
  15.             }else{
  16.                 document.forms['formulario'].TAestado.rows=ubound;
  17.                 document.getElementById('TAestado').className="TAestadoNor";
  18.             }
  19.            
  20.     }

Con la función Agrandar, cuando se hace un salto de linea el numero de rows del textarea aumenta, y si se quitar un salto de linea, el numero de rows disminuye. También, cuando el maximo de rows es 10, el numero de rows no se altera y aparece el scroll. TAestadoMAX y TAestadoNor son 2 clases en CSS:
Código CSS:
Ver original
  1. @charset "utf-8";
  2. /* CSS Document */
  3. .TAestadoMax{
  4.     resize: none;
  5.     border: none;  
  6. }
  7. .TAestadoNor{
  8.     resize: none;
  9.     overflow: hidden;
  10.     border: none;  
  11. }

Gracias por vuestra ayuda. Recientemente me inicié en JS y voy viendo como se pueden hacer muchas cosas en este lenguaje

Última edición por cslbcn; 19/12/2009 a las 09:09
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 06:13.