2010-11-16 10 views
2

ok je l'ai fait selon votre suggestion mais un peu il semble amatuerish ha .. car il répète la même chose pour chaque groupe de pourcentage: css et message. Je me demande s'il y a une autre façon de le changer? Sinon, je suis ok avec ça ..Les opérateurs ne fonctionnent pas?

si (69 < percentDiscount & & percentDiscount < 101) {

 $(this).find("#percentoff").html('&gt; 70% off'); 
     $(this).find("#percentoff").addClass('badge70'); 
    } 

    else if (49 < percentDiscount && percentDiscount < 70) { 

     $(this).find("#percentoff").html('&gt; 50% off'); 
     $(this).find("#percentoff").addClass('badge50'); 
    } 

    else if (29 < percentDiscount && percentDiscount < 50) { 

     $(this).find("#percentoff").html('&gt; 30% off'); 
     $(this).find("#percentoff").addClass('badge30'); 
    } 


    else if (19 < percentDiscount && percentDiscount < 30) { 

     $(this).find("#percentoff").html('&gt; 20% off'); 
     $(this).find("#percentoff").addClass('badge30'); 
    } 

Répondre

3

Vous vérifiez pour une percentDiscount qui est à la fois plus élevé que les deux numéros, de sorte que le second dans votre if chèque, il n'y a pas un nombre gauche qui sont également ci-dessus 69. Il devrait ressembler à ceci à la place (garder votre la logique d'exclusion):

if (percentDiscount > 69 && percentDiscount < 101) {  
    $(this).find("#percentoff").html('&gt; 70% off'); 
    $(this).find("#percentoff").addClass('badge70'); 
}  
else if (percentDiscount > 49 && percentDiscount < 69) {  
    $(this).find("#percentoff").html('&gt; 50% off'); 
    $(this).find("#percentoff").addClass('badge50'); 
}  
else if (percentDiscount > 29 && percentDiscount < 49) {  
    $(this).find("#percentoff").html('&gt; 30% off'); 
    $(this).find("#percentoff").addClass('badge30'); 
} 

Swap termes ils sont dans le même ordre comme je l'ai ci-dessus, je pense que vous trouverez qu'il est beaucoup plus facile à lire. Cependant, dans l'ensemble termes excluent les 69 et 49 particulièrement à des points, donc je changerais votre logique à ceci:

if (percentDiscount > 69) {  
    $(this).find("#percentoff").html('&gt; 70% off'); 
    $(this).find("#percentoff").addClass('badge70'); 
}  
else if (percentDiscount > 49) {  
    $(this).find("#percentoff").html('&gt; 50% off'); 
    $(this).find("#percentoff").addClass('badge50'); 
}  
else if (percentDiscount > 29) {  
    $(this).find("#percentoff").html('&gt; 30% off'); 
    $(this).find("#percentoff").addClass('badge30'); 
} 

La première if saisit les 69 ci-dessus, suivant ceux ci-dessus, 49, etc ... beaucoup plus simple :)

+1

Correction, elle vérifie si un nombre est inférieur à une variable, puis si la variable est inférieure à un nombre différent. La deuxième vérification rend le premier contrôle redondant. –

+1

@Andy - vous avez raison, échanger les termes autour de ce qui a dû lire, corriger dans la correction ci-dessus –

+0

@Nick: oui, m'a jeté d'abord aussi - j'écris presque toujours la variable d'abord dans ces conditions. +1 –

5

Vous avez le> dans le mauvais sens. Regardons le premier titre d'exemple: (. Je renversé la première condition parce que je pense qu'il fait ce qui est la prochaine étape plus évident)

if (percentDiscount > 69 && percentDiscount > 101) 

Alors percentDiscount doit être supérieur à 69 et supérieur à 101 Vous voulez

if (69 < percentDiscount && percentDiscount < 101) 

Cela devrait faire ce que vous attendez.

+1

Cela ne fera pas ce qui est attendu, puisque '49' et' 69'% ne toucheront aucun de ces cas 'si' :) –

+0

@nick, merci pour votre aide. J'ai édité ci-dessus. Je suis toujours en train de déterminer comment changer le code pour ne pas avoir à compter sur les chiffres à vérifier. mm .. – joe

2

Dans le premier test, vous testez si percentDiscount est supérieur à 69 et plus que 101. Je pense que vous vouliez dire ceci:

if (69 < percentDiscount && percentDiscount < 101) ... 

Les autres tests ont le même problème.

2

Jetez un oeil à cette ligne:

if (69 < percentDiscount && percentDiscount > 101) { 

Il y a deux problèmes ici. Premièrement: vous faites les comparaisons mal. A partir de cette instruction if, vous vérifiez si percentDiscount est plus grand que 69 et si elle est plus grand que 101. Donc, ce ne contiendra que si elle est plus grande que 101. Qu'est-ce que vous vouliez sans doute est la suivante:

if (69 < percentDiscount && percentDiscount < 101) { 

Cela peut être mieux écrit comme:

if (percentDiscount > 69 && percentDiscount < 101) { 

Mais, il y a toujours un problème. Priorité de l'opérateur.Le dernier exemple doit être écrit

if ((percentDiscount > 69) && (percentDiscount < 101)) { 

pour éviter les ambiguïtés.

+1

La priorité d'opérateur n'est pas un problème ici, logique et/ou ont une priorité inférieure à '<' and '>'. –

+0

@Andy: Je suis conscient de cela, mais il devrait être bon d'utiliser des parenthèses parce que ce genre de choses n'est pas toujours évident – darioo

+0

merci pour votre aide! – joe

Questions connexes