Foros del Web » Programando para Internet » Javascript »

Caracteres textarea

Estas en el tema de Caracteres textarea en el foro de Javascript en Foros del Web. Hola gente, estoy haciendo una página con un formulario en donde tengo un textarea, y me interesaría que en el textarea no se pudiesen introducir ...
  #1 (permalink)  
Antiguo 20/05/2010, 15:55
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Caracteres textarea

Hola gente,
estoy haciendo una página con un formulario en donde tengo un textarea, y me interesaría que en el textarea no se pudiesen introducir más de 1000 carácteres, por ejemplo. Tengo el siguiente código pero no me funciona :S

Código HTML:
Ver original
  1. <form name="Comentario" action="mailto:[email protected]" method="post" enctype="application/x-www-form-urlencoded" id="comid">
  2.    &nbsp;<textarea id="coment" cols='55' rows='17' onkeypress="caract()"></textarea><br />
  3.    &nbsp;<input id="numCaracteres" type='text' value="1000" size="7" ReadOnly />
  4.    <br /><br />
  5.    &nbsp;<input type='submit' value="Enviar comentario" />  <input type='reset' value="Borrar" />
  6.   </form>
  7. </body>
  8. </html>

Código Javascript:
Ver original
  1. <script type='text/javascript'>
  2.  var d = document;
  3. function caract(){
  4.   var caracter = d.getElementById('coment').value.length;
  5.   var valor = d.getElementById('numCaracteres').value;
  6.   valor == 1000 - caracter;
  7.   if(caracter==1000){
  8.    alert('Ya has alcanzado los 1000 caráceteres, por favor envía este comentario y luego otro nuevo. Gracias.');
  9.   }
  10.  }
  11. </script>

La cuestión es que coja el length del textarea y se lo reste a 1000 y eso me lo muestre en el input de abajo, y que si el length llega a 1000 salga un alert diciendo que se pasó de largo.

Gracias de antemano,
Saludos (:
  #2 (permalink)  
Antiguo 20/05/2010, 16:31
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: Caracteres textarea

tienes algo que no hace sentido, aunque es una expresion valida pero realmente hace nada. en la linea #6 del script tienes valor == 1000 - caracter;. supongo que aqui quisistes asignar el resultado a la variable valor. pero luego analizando todo el codigo, tienes que modificar 3 lineas, de la 5 a la 7. lo que debes hacer:
#5 - adquirir la referencia del campo INPUT. en tu codigo estas obteniendo el valor contenido en lugar de la referencia.
#6 - asignar la diferencia al campo INPUT. desde la referencia valor escribe el resultado en la propiedad value.
#7 - determinar si la longitud llega a 1000. esta mas o menos bien, pero digamos si pego un texto que contiene mas de 1000 caracteres. dado que la comparacion es igualdad, si el texto pegado tiene mas de 1000 caracteres, el condicional valida como falso. tienes que comparar si es igual o mayor que 1000.

en adicion, te conviene truncar el texto cuando sobrepase el limite. es decir, capturar los primeros 1000 caracteres y asignarlo al TEXTAREA.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 20/05/2010, 16:45
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Respuesta: Caracteres textarea

Bueno muchas gracias, desde luego llevaba media hora delante de esto y no me había dado cuenta del = y >= xD
Lo único que no entiendo es por qué tengo que hacer primero
var valor = d.getElementById('numCaracteres');
y depués
valor.value = 1000 - caracter;
De todas maneras lo cambié como me dijiste (creo) y sigue sin funcionar:
Código Javascript:
Ver original
  1. <script type='text/javascript'>
  2. function caract(){
  3.   var caracter = d.getElementById('coment').value.length;
  4.   var valor = d.getElementById('numCaracteres');
  5.   valor.value = 1000 - caracter;
  6.   if(caracter>=1000){
  7.    alert('Ya has alcanzado los 1000 carácteres, por favor envía este comentario y luego otro nuevo. Gracias.');
  8.   }
  9.  }
  10. </script>

Gracias :D
  #4 (permalink)  
Antiguo 20/05/2010, 16:59
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: Caracteres textarea

de tu ultimo script, fijate que eliminastes la referencia de document. es decir, var d = document;.
Cita:
Lo único que no entiendo es por qué tengo que hacer primero
var valor = d.getElementById('numCaracteres');
y depués
valor.value = 1000 - caracter;
porque cada propiedad devuelve un tipo de valor. la propiedad value devuelve una copia del tipo string. los string no hacen referencia a la fuente original. es decir, no existe un enlace entre la variable y la fuente original del string. en cambio, el contenido devuelto por getElementById es una referencia del elemento. como dice la palabra, las referencias apuntan a una fuente. por esa razon primero debes obtener el elemento y luego acceder a la propiedad.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 21/05/2010, 07:41
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Respuesta: Caracteres textarea

Ya lo de var d lo quité porque se sobreentendía, pero sigue sin funcionarme...
Estuve mirando por Internet y encontré esto que sí me funciona, pero no veo cuál es la diferencia con mi script:

Código Javascript:
Ver original
  1. var supportsKeys = false
  2.    var f = document.getElementById('coment');
  3.    function calcCharLeft(f) {
  4.         lenUSig = f.lenSSig.value
  5.         maxLength = 1000 - f.lenSysSig.value - lenUSig
  6.         if (f.Coment.value.length > maxLength) {
  7.             f.Coment.value = f.Coment.value.substring(0,maxLength)
  8.             charleft = 0
  9.         } else {
  10.             charleft = maxLength - f.Coment.value.length
  11.         }
  12.  
  13.         f.numc.value = charleft
  14. }
  15.  
  16.     function textKey(f) {
  17.     supportsKeys = true
  18.     calcCharLeft(f)
  19. }

Luego lo invoco con onkeyup y onkeydown textKey(this.form)
lenSysSig, lenUSig y LenSSig son 3 hidden pero su value es 0...
Saludos y gracias (:

Etiquetas: caracteres, textarea
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 07:27.