Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Declaracion de variables javascript

Estas en el tema de Declaracion de variables javascript en el foro de Frameworks JS en Foros del Web. Hola que tal. El problema es el siguiente, no entiendo que esté mal. (combino javascript con jquery) Sé que una variable cuando es declarada fuera ...
  #1 (permalink)  
Antiguo 15/12/2010, 01:25
 
Fecha de Ingreso: febrero-2010
Mensajes: 49
Antigüedad: 14 años, 9 meses
Puntos: 1
Declaracion de variables javascript

Hola que tal.

El problema es el siguiente, no entiendo que esté mal.
(combino javascript con jquery)

Sé que una variable cuando es declarada fuera de una funcion es global, para que una variable sea global declarada dentro de una funcion, debe hacerse sin "var".

En mi codigo, tengo una funcion que es ejecutada dentro de otra funcion.
La segunda se ejecuta al dar click en un boton. esta, debe evaluar si una variable ("fal") es mayor a cero. Esta variable, es declarada globalmente fuera de ambas funciones, por defecto en 0.

Al presionar el boton, la primer funcion es ejecutada, evalua los campos, si la variable es de valor 0 ejecuta a la segunda funcion y comienza un contador, el cual hace que dicha variable cambie de valor (mayor a 0).

Al pulsar por segunda vez el boton, la primer funcion deberia negar la ejecucion de la segunda, pero no es así.

Si no declarara la variable de manera global, simplemente me tira el error que la variable no ha sido declarada y nada funciona.

El codigo es el siguiente:
vriable:

Código PHP:
var fal=0
Segunda funcion:
Código PHP:

 
function faltan(fal){ 
 
fal fal-1000;
if (
fal 0){ 
var 
segundos Math.round(fal/1000); 
var 
minutos Math.floor(segundos/60); 
var 
segundos_s segundos%60
var 
horas Math.floor(minutos/60); 
var 
minutos_s minutos%60
var 
dias Math.floor(horas/24); 
var 
horas_s horas%24
$(
".error").html('Para otro espera<br>'+minutos_s+":"+segundos_s);
setTimeout("faltan("+fal+")",1000); 


else { 
$(
".error").css('background-color''#00ff00');
$(
".error").html('P&uacute;edes enviar un saludo');
return 
true


Primer funcion

Código PHP:
$("#peti").live('click', function(){
     
re=/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/
      var 
name = $("#n").val();
        var 
email = $("#e").val();
      var 
com = $("#c").val();
      var 
= $("#p").val();
      var 
= $("#c").val().length;
      if(
re.exec(email)){
      if (
name == "" || email == "" || com == ""){
        $(
".error").css('background-color'e_color);
        $(
".error").html('Un canpo est&aacute; vacio');      
      }else{
//vacios
      
if (n>=50){
          if (
fal <= 0){
      $(
'#error').load('mail.php?n='+name+'&e='+email+'&c='+com+'&p='+p+'');
      $(
".error").css('background-color'e_color);
      
faltan(180000);
          }else{
//faltan
          
alert(fal);
          $(
".error").css('border''1px solid #ffffff');
          }
      }
//caracteres min
      
}
      }else{
//evalua
      
$(".error").css('background-color'e_color);
      $(
".error").html('E-mail Invalido');
      }
      
     }); 
  #2 (permalink)  
Antiguo 15/12/2010, 02:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Declaracion de variables javascript

function faltan(fal){
...
}

Si fal es global luego no hace falta pasarla como parametro o el parametro no puede tener el nombre de una var global...

Cuidado

Cita:
Sé que una variable cuando es declarada fuera de una funcion es global, para que una variable sea global declarada dentro de una funcion, debe hacerse sin "var".
tienes un ligero error de concepto "var" es la forma de declarar variables sean globales o locales, pero no es obligatorio (pero recomendable). Otra forma de declarar variables es la definicion de parametros de entrada a una función, que pasan automaticamente a ser variables locales de la función.

cuando no pones "var" javascript mira si la variable existe, primero la busaca en el contexto en que este (local o global), si existe hace lo que les estes pidiendo (en tu caso fal = fal-1000; restar 1000 al valor de fal, podrias usar la notació fal-=1000; ) si la variable no existe la declara y despues hace lo que le pidas.

Tu error de concepto esta en que una variable globalmente declarada cuando la usas en un contexto local (funcion) no debes redeclararla con var puesto que machacarias la declaración global y con ello el valor que pueda tener la variable gobal.

No estas redeclarando con var pero estas declarando un parametro que para el caso es lo mismo...

Así

Código Javascript:
Ver original
  1. function faltan(fal){
  2.  fal = fal-1000;

fal en la funcion pasa a ser el parametro no la variable global puesto que al ejecutar la segunda linea sin var (como debe ser) javascript busca una variable llamada fal, primero la busaca en la función como encuentra un parametro llamado fal entiende que te refieres a el y no busca nada mas por tanto la variable global fal no entra en juego... o lo que es lo mismo estas modificando el valor del parametro no el de la variable global, luego la funcion faltan no tinen ningun problema en ejecutarse pero la otra funcion no se entera de los cambios...

Creo sin haber entrado a fondo en tu codigo que deberias hacer lo siguiente, quitar el parametro de la funcion faltan() y en la otra funcion substiuir la linea

Código Javascript:
Ver original
  1. faltan(180000);

por


Código Javascript:
Ver original
  1. fal=180000;
  2.       faltan();

de tal forma que das valor a la variable global y luego ejecutas la funcion faltan...

Quim

Última edición por quimfv; 15/12/2010 a las 03:39
  #3 (permalink)  
Antiguo 15/12/2010, 11:25
 
Fecha de Ingreso: febrero-2010
Mensajes: 49
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Declaracion de variables javascript

Ya entiendo, Justo anoche despúes de públicar esto, me vino a la mente que pudo haber sido eso, Pero no tenia claro exactamente como.


Te agradesco tu explicacion.

En conclusion "Un parametro no es una variable"
  #4 (permalink)  
Antiguo 16/12/2010, 02:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Declaracion de variables javascript

Un parametro se comporta como una variable local de la funcion donde se define, si su nombre coincide con el de una variable ya declarada globalmente prevalece como parametro con su caracter de local.

Quim
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 16/12/2010 a las 02:38

Etiquetas: bonsai, jquery, radio, radiobonsai, temporisador, variables
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 17:41.