Variable global pasada entre funciones jQuery

Estoy configurando una variable en una declaración if...else. Sin embargo, cuando trato de llamar a la variable en otra función, aparece el error de que la variable no está definida. ¿Cómo puedo establecer una variable global?

function username_check(){  
username = $('#username').val();
if(username == "" || username.length < 7 || username.indexOf(' ') > -1){
    usernameFilled = 0;
else{
    usernameFilled = 1;
}   
}

function email_check(){ 
email = $('#email').val();
if(email == "" || email.indexOf(' ') > -1) {
    emailFilled = 0;
}else{
    emailFilled = 1;
}
}

function password_length(){ 
password = $('#password').val();
if(password == "" || password.indexOf(' ') > -1) {
    passwordFilled = 0;
}else{
    passwordFilled = 1;
}
}

function password_check(){  
  password2 = $('#password2').val();
  password = $('#password').val();
  if(password2.length > 7 && password2 == password) {
    password2Filled = 1; /**setting the variable**/
  }else{
    password2Filled = 0;
  }
}

function upload(){
if (usernameFilled == 0 || emailFilled == 0 || passwordFilled == 0 || password2Filled == 0) {
    alert('All fields are required');
}else{
    /**upload to database**/
}

preguntado el 04 de julio de 12 a las 03:07

Reproduzca su problema en jsfiddle -

¿Estás seguro de que estás llamando? upload después de llama password_check ? -

@Tats_innit: la variable global no debe declararse de una manera especial. Su declaración va en la primera entrada de inicialización -

@Tats_innit: - var es lo que diferencia las variables locales de las globales. Y la pregunta es sobre globales. Si no especificas var - la variable se vuelve global, y a = 1; igual a window.a = 1; -

@mr.musicman luego haga lo mismo para las llamadas a estas funciones (copie y pegue las llamadas a password_check y upload! -

3 Respuestas

En lugar de configurar una variable global, simplemente devuelva password2Filled y guárdelo fuera de la función. Luego puedes pasarlo a la siguiente función.

ie

function password_check(){  
   password2 = $('#password2').val();
   password = $('#password').val();
   if(password2.length > 7 && password2 == password) {
       password2Filled = 1; /**setting the variable**/
   }else{
       password2Filled = 0;
   }
   return password2Filled;
}

function upload(password2Filled)
{
    if (password2Filled == 0) { /**calling the variable**/
        alert('All fields are required');
    }else{
        /**upload to database**/
    }
}

....

var passwordsOk = password_check();
upload(passwordOk);

Intente evitar las variables globales, saturan el programa y dificultan ver el flujo del código y crear código que sea reutilizable.

Respondido 04 Jul 12, 03:07

lo intenté Podría haber hecho algo mal allí, solo recibí el error de que las variables no estaban definidas. Tendré que volver a intentarlo... - Stevenspiel

Probablemente esté llamando a las funciones en el orden incorrecto, o haciendo algo más mal, porque funciona bien para mí, editó el código ligeramente para probarlo:

function password_check(){  
  var password2 = $('#password2').val(), 
      password = $('#password').val();
  password2Filled = (password2.length > 7 && password2 == password) ? 1:0;
}

function upload(){
    console.log(password2Filled); //prints 0 or 1 just fine ???
}

$("#btn").on('click', function() {
    password_check();
    upload();
});

VIOLÍN

Respondido 04 Jul 12, 03:07

Es cierto, estoy tratando de llamar a más funciones que solo una. Actualizaré mi pregunta para mostrarte. Quizás puedas detectar el error. ¡Gracias! - Stevenspiel

Las variables globales se crean en JavaScript definiéndolas fuera del alcance de todas las funciones. Al igual que:

<script type="text/javascript">
var globalVariable;


function blah()
{
    globalVariable = "something";
}

function anotherFunction()
{
    alert(globalVariable);
}
</script>

El Documentación de ECMAScript/JavaScript establece que un "Objeto global" debe crearse fuera de cualquier contexto de ejecución.

Respondido 04 Jul 12, 04:07

En realidad, usted declara variables globales usando el objeto de la ventana, como window.myVar = algo, y simplemente omitir la palabra clave 'var' lo hará sin importar en qué ámbito se encuentre. - adeneo

@adeneo ¿Tiene alguna documentación oficial o fuentes para citar que le indiquen usar ese método? El hecho de que funcione no significa que sea una práctica recomendada documentada. - alex w

No, pero a menos que esté usando ECMA 5 en modo estricto, funcionará bien, pero no hay nada de malo en declarar variables, y es una buena práctica y se recomienda hasta donde yo sé, pero no declarar en el alcance global es casi seguro que no es el problema en este caso. - adeneo

En realidad, la documentación de MDN es aquí! -- Using var outside a function is optional; assigning a value to an undeclared variable implicitly declares it as a global variable (also a property of the global object). The difference is that a declared variable is a non-configurable property of the global object while an undeclared is configurable. - adeneo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.