2012-02-21 16 views
9

Tengo un enlace. Cuando alguien hace clic en eso, quiero verificar algunas condiciones antes de dejar que funcione. Si es false, se debe evitar la acción predeterminada.Si las condiciones son falsas, evite el valor predeterminado

$(".pager-next a.active").click(function(event) { 
    if (!a == 1) { 
     event.preventDefault(); 
    }   
}); 

El enlace solamente se debe trabajar si a es igual a 1. Es el código anterior correcto. a se establece en 1 si se cumple una condición en particular. El enlace solo debería funcionar si se cumple la condición.

+4

* es el código correcto * ¿Por qué lo preguntas? ¿Tienes problemas? Si es así, ¿cuáles? –

+0

¿Qué es 'a'? ¿Puedes publicarlo en tu código? – elclanrs

+3

Tenga cuidado, hay una diferencia entre '==' y '==='. Si desea verificar si 'a' es igual al número entero' 1', entonces debería usar 'a === 1'. Consulte http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use para conocer la diferencia. –

Respuesta

9

Suponiendo por 'sólo debe trabajar si a es igual a 1' quiere decir el texto del elemento a es igual a 1, intente esto:

$(".pager-next a.active").click(function(event) { 
    if ($(this).text() != "1") { 
     event.preventDefault(); 
    }   
}); 

Puede modificar text() para utilizar cualquier atributo del elemento está disponible para ti en jQuery.

ACTUALIZACIÓN

mi a es un var, que mantenga el valor 0 hasta que se cumpla una condición.

En cuyo caso, el problema era simplemente que su operador de igualdad era incorrecta:

$(".pager-next a.active").click(function(event) { 
    if (a != 1) { 
     event.preventDefault(); 
    }    
}); 
+0

my a es una var que contiene el valor 0 hasta que se cumpla una condición. – esafwan

+1

ah, entiendo, en cuyo caso he actualizado mi respuesta. –

+1

Para no confundirse, podría valer la pena utilizar 'true' y' false' en lugar de '0' y' 1'. –

3

CUIDADO:

!a se evalúa como verdadera o falsa. Si una conversión de a a bool es true, entonces !a se evalúa como falso.

Todos los enteros positivos se evalúan a true. Entonces !a evaluará a falso. Una comparación que use el doble igual a == en 1 probará esa booleana !a con la booleana 1 o true. Entonces, si a es un número entero positivo como sospecho que es entonces su declaración if SIEMPRE evaluará a falso.

Si desea probar algo NO es necesario cambiar los primeros equivalentes en su operador de comparación (===) como !.

E.g. var a = 2; if(a!==1) { // do something } < - A es 2 y, por lo tanto, si el wille de comparación se evalúa como verdadero ano igual 1.

En su código tenemos:

var a = 2; 
if(!a==1){ 
    // a was 2 (or boolean true by default) 
    // but using ! has negated its boolean value 
    // so !a evaluates to boolean false 
    // which is being compared to 1 (evaluating to boolean true) 
    // so this if statement will never get here 
} 

Espero que ayude

P. S.Recuerde que sus operadores de comparación:

!"hello world" == 0 // true 
!"hello world" === 0 // false 

actualización

vi su comentario en otro post que decía que a es 0 hasta que algo sucede entonces es 1.

En este caso:

var a = 0; // integer 0 or bool false 
if(!a==1){ // if the bool opposite of 0 (false) is equal to 1 (true) 
    // well, opposite of false is true, so you're checking if true is equal to true 
    // so this will get called 
    e.preventDefault(); 
} 
+0

Muchas gracias fue una explicación muy completa. Aprendí mucho más de lo que pedí. – esafwan

Cuestiones relacionadas