2012-02-21 13 views
9

Ho un collegamento. Quando qualcuno fa clic su che voglio controllare alcune condizioni prima di farlo funzionare. Se è false, l'azione predefinita dovrebbe essere impedita.Se le condizioni sono false, allora previene il valore predefinito

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

Il collegamento dovrebbe funzionare solo se a è uguale a 1. Il codice sopra è corretto. a è impostato su 1 se si verifica una condizione particolare. Il collegamento dovrebbe funzionare solo se la condizione è soddisfatta.

+4

* è il codice di cui sopra corretto * perché me lo chiedi? Hai problemi? Se sì, quali? –

+0

Cos'è 'a'? Puoi postarlo nel tuo codice? – elclanrs

+3

Fai attenzione, c'è una differenza tra '==' e '==='. Se vuoi controllare se 'a' è uguale all'intero' 1', allora dovresti usare 'a === 1'. Vedi http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use per la differenza. –

risposta

9

Supponendo che da 'dovrebbe funzionare solo se A è uguale a 1' si intende il testo dell'elemento a è uguale a 1, provare questo:

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

È possibile modificare text() di utilizzare qualsiasi attributo dell'elemento è disponibile per te in jQuery.

UPDATE

mia a è un var, che detengono il valore 0 fino a quando una condizione è soddisfatta.

In questo caso, il problema era semplicemente che il vostro operatore di uguaglianza non era corretto:

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

my a è una var che contiene il valore 0 finché non viene soddisfatta una condizione. – esafwan

+1

ah, ho capito, nel qual caso ho aggiornato la mia risposta. –

+1

Al fine di non confondersi, potrebbe valere la pena di usare 'true' e' false' invece di '0' e' 1'. –

3

attenzione:

!a restituisce true o false. Se una conversione di a in una bool è true, allora !a restituisce false.

Tutti gli interi positivi valutano a true. Quindi !a valuterà su falso. Un confronto utilizzando il doppio equivale da == a 1 verificherà che il valore booleano !a con il valore booleano 1 o true. Quindi se a è un numero intero positivo come sospetto che sia allora l'istruzione if verrà SEMPRE valutata su false.

Se si desidera testare qualcosa NON è altro, è necessario modificare i primi equals nell'operatore di confronto (===) in modo che sia !.

E.g. var a = 2; if(a!==1) { // do something } < - A è 2 e quindi il confronto se wille vale true come anon uguale a uguale a 1.

Nel codice che abbiamo:

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 
} 

Speranza che aiuta

P.S.Ricordatevi dei vostri operatori di confronto:

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

Aggiornamento

Ho visto il tuo commento su un altro post, che ha detto che è a0 finché non succede qualcosa, allora è 1.

In questo 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

Grazie mille che è stata una spiegazione molto completa. Ho imparato molto più di quanto ho chiesto. – esafwan