Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] No cambia la variable con onFocus del textarea

Estas en el tema de No cambia la variable con onFocus del textarea en el foro de Jquery en Foros del Web. Hola! estoy teniendo un problema con (sospecho yo) una variable de javascript. EL asunto es que estoy generando dinamicamente unos textarea con php y cada ...
  #1 (permalink)  
Antiguo 17/06/2013, 10:41
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Pregunta No cambia la variable con onFocus del textarea

Hola! estoy teniendo un problema con (sospecho yo) una variable de javascript. EL asunto es que estoy generando dinamicamente unos textarea con php y cada uno de ellos deben poseer un conteo de caracteres los cuales estoy trabajando con jquery.

este es el script jquery:
Código:
var _nivel = 0;

$(document).ready(function() {
var limite = 500;
	$('#mensaje'+_nivel).keyup(function() {
		var longitud = $(this).val().length;
		var resto = limite - longitud;
		$('#totalcar'+_nivel).html(resto);
		if(resto <= 0){
			$('#mensaje'+_nivel).attr("maxlength", limite);
		}
	});
	$('#mensaje'+_nivel).keydown(function() {
		var longitud = $(this).val().length;
		var resto = limite - longitud;
		$('#totalcar'+_nivel).html(resto);
		if(resto <= 0){
			$('#mensaje'+_nivel).attr("maxlength", limite);
		}
	});
});
asi quedan los textarea generado dinamicamente:
Código HTML:
<textarea id='mensaje".$id."' onFocus='_nivel=".$id.";'></textarea>
<span id='totalcar".$id."'/>500</span> 
El problema es que solo me funciona el textarea "mensaje0", el resto... nada que ver. Pero si le cambio manualmente el valor a la variable _nivel a 5 por ejemplo me funciona solo el "mensaje5".

¿cual es mi error?

Saludos y muchas gracias de antemano!
  #2 (permalink)  
Antiguo 17/06/2013, 11:06
 
Fecha de Ingreso: junio-2008
Ubicación: Colombia
Mensajes: 207
Antigüedad: 15 años, 10 meses
Puntos: 12
Respuesta: No cambia la variable con onFocus del textarea

usa .on()

http://api.jquery.com/on/

Lee mi respuesta en este thread, cambiando click por keyup y keydown respectivamente
http://www.forosdelweb.com/f179/even...mente-1057374/
  #3 (permalink)  
Antiguo 17/06/2013, 12:10
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: No cambia la variable con onFocus del textarea

Hola Rosencrantz, gracias por responder! estuve probando pero sigue sin funcionar . Lo coloque de esta manera:

Código:
$(document).ready(function() {
var limite = 500;
	$('#mensaje'+_nivel).on('keyup', function(event) {
		var longitud = $(this).val().length;
		var resto = limite - longitud;
		$('#totalcar'+_nivel).html(resto);
		if(resto <= 0){
			$('#mensaje'+_nivel).attr("maxlength", limite);
		}
	});
	$('#mensaje'+_nivel).on('keydown', function(event) {
		var longitud = $(this).val().length;
		var resto = limite - longitud;
		$('#totalcar'+_nivel).html(resto);
		if(resto <= 0){
			$('#mensaje'+_nivel).attr("maxlength", limite);
		}
	});
});
  #4 (permalink)  
Antiguo 17/06/2013, 17:24
 
Fecha de Ingreso: junio-2008
Ubicación: Colombia
Mensajes: 207
Antigüedad: 15 años, 10 meses
Puntos: 12
Respuesta: No cambia la variable con onFocus del textarea

Prueba con algo como esto, on() se escribe distinto dependiendo de si el elemento es estático o dinámico, la versión dinámica es esta e implica el uso del context o el contenedor del elemento dinámico (donde aparece).
Código:
$('#contenedor_donde_aparecen_los_textarea').on('keyup',''#mensaje'+_nivel', function(event) {
		var longitud = $(this).val().length;
		var resto = limite - longitud;
		$('#totalcar'+_nivel).html(resto);
		if(resto <= 0){
			$('#mensaje'+_nivel).attr("maxlength", limite);
		}
	});
Espero sirva, saludos.
  #5 (permalink)  
Antiguo 18/06/2013, 16:23
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: No cambia la variable con onFocus del textarea

El problema es que los text areas se generan dinamicamente dentro de ul > li > que a su vez contiene div con el id generado dinamicamente...

Probe colocando donde tu me dices el div general que contiene todo esto pero sigue sin funcionar como podria solucionarlo
  #6 (permalink)  
Antiguo 18/06/2013, 16:45
Avatar de jrobinsonc  
Fecha de Ingreso: noviembre-2007
Ubicación: Santo Domingo
Mensajes: 34
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: No cambia la variable con onFocus del textarea

Aquí te pongo un ejemplo funcionando.

Con este script te debe de funcionar:
Código Javascript:
Ver original
  1. var field_limit = 500;
  2.  
  3. jQuery(function($){
  4.     $('textarea').on('keyup keydown', function() {
  5.         var $self = $(this),
  6.             id = $self.attr('id').substr(7),
  7.             $span = $('#totalcar' + id),
  8.             field_length = $self.val().length,
  9.             field_rest = field_limit - field_length;    
  10.        
  11.             $span.html(field_rest);
  12.     });
  13. });

Solo tienes que tomar en cuenta lo siguiente:
  • La variable _nivel no es necesaria.
  • Elimine el atributo onFocus de la etiqueta textarea por que no es necesario si jquery maneja el keyup y el keydown del elemento.

En esta url te pongo un ejemplo en funcionamiento:
http://jsfiddle.net/jrobinsonc/Dax99/

Última edición por jrobinsonc; 18/06/2013 a las 17:00
  #7 (permalink)  
Antiguo 19/06/2013, 11:58
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: No cambia la variable con onFocus del textarea

Perfecto jrobinsonc! funcionó a la perfección! muchas gracias jrobinsonc todavía tengo mucho que aprender de JQUERY

Muchísimas gracias también a ti Rosencrantz!

Saludos!

Etiquetas: funcion, html, javascript, php, textarea, variable
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 00:42.