2010-01-06 6 views
0

J'essaie de faire une instruction if en javascript qui fera quelque chose si la variable n'égale pas l'une des quelques choses différentes. J'ai essayé de nombreuses variantes de l'opérateur OR, mais je ne peux pas le faire fonctionner.Javascript OU dans une instruction IF

if(var != "One" || "Two" || "Three"){ 
    // Do Something 
    } 

Des idées? Merci!

Mise à jour:

J'ai essayé avant:

if(var != "One" || var != "Two" || var != "Three"){ 
    // Do Something 
    } 

Pour une raison quelconque, il ne fonctionne pas. Ma variable tire des informations du DOM, je ne sais pas si cela aurait un effet.

code réel

// Gets Value of the Field (Drop Down box) 
var itemtype = document.forms[0].elements['itemtype' + i]; 

    if(itemtype.value != "Silverware" || itemtype.value != "Gold Coins" || itemtype.value != "Silver Coins"){ 
// Do Something 
     } 
+5

comme une note de côté: var est un mot-clé, pas un nom de variable – cobbal

Répondre

8

Votre expression est toujours vrai, vous avez besoin:

if(!(myVar == "One" || myVar == "Two" || myVar == "Three")) { 
    // myVar is not One, Two or Three 
} 

Ou:

if ((myVar != "One") && (myVar != "Two") && (myVar != "Three")) { 
    // myVar is not One, Two or Three 
} 

Et, pour la brièveté:

if (!/One|Two|Three/.test(myVar)) { 
    // myVar is not One, Two or Three 
} 
// Or: 
if (!myVar.match("One|Two|Three")) { 
    // ... 
} 

Plus d'infos:

Modifier: Si vous allez pour les dernières approches, puisque le code que vous avez posté semble pour faire partie d'une boucle, je vous recommande de créer l'expression régulière en dehors de la boucle, et d'utiliser la méthode RegExp.prototype.test plutôt que String.prototype.match, aussi vous pouvez vous soucier de limites de mots, à savoir "noOne" correspondra à "One" sans eux ...

+0

Merci, enfin une réponse sensée. Je vais l'essayer maintenant. –

+0

Je t'aime, merci beaucoup. permettez-moi d'ajouter à la 56k haha ​​ –

+0

Je voudrais utiliser l'expression rationnelle '! myVar.match (/ One | Two | Three /)' au lieu de passer dans la chaîne - mais +1 pour couvrir toutes les bases – gnarf

6

En supposant que vous voulez dire « val ne correspond pas à un ou deux ou trois », puis le théorème de De Morgan applique:

 
if ((val != "One") && (val != "Two") && (val != "Three")) { 
    // Do something... 
} 
+0

bien sûr, vous ne nommeriez pas la variable 'var' –

+3

Equivalently,'! (Var == "One" || var == "Two" || var == "Trois") '. – ephemient

+0

Bien sûr, ce serait juste stupide =) – maerics

0

Pour une courte façon de le faire, essayez ce format (copié à partir):

if(name in {'bobby':'', 'sue':'','smith':''}) { ... } 

ou

function oc(a) 
{ 
    var o = {}; 
    for(var i=0;i<a.length;i++) 
    { 
    o[a[i]]=''; 
    } 
    return o; 
} 
if(name in oc(['bobby', 'sue','smith'])) { ... } 
+1

les deux méthodes sont bonnes, la première est fausse comme discuté sur d'autres réponses ('||' devrait être '&&'). – cobbal

+0

Merci cobbal, je vais réparer ma réponse. – Gattster

+0

J'ai essayé ça avant mais ça manquait car j'ai besoin du contraire. pas dedans. –

-1

En plus d'étendre l'expression en trois clauses, je pense que vous feriez mieux de nommer votre variable quelque chose d'autre que var. En JavaScript, var est un mot-clé. La plupart des navigateurs ne vont pas vous alerter à cette erreur.

+0

la variable n'est pas vraiment var. c'était un exemple seulement. –

+1

+1 pour signaler le problème avec l'identificateur 'var'. Je ne sais pas pourquoi cela a été voté. –

0

La méthode mentionnée par Mike fonctionnera correctement pour seulement 3 valeurs, mais si vous voulez l'étendre aux valeurs n, vos blocs if vont rapidement devenir moche. Firefox 1.5+ et IE 8 ont une méthode Array.indexOf vous pouvez utiliser comme ceci:

if(["One","Two","Test"].indexOf(myVar)!=-1) 
{ 
    //do stuff 
} 

Pour appuyer cette méthode sur IE < = 7, vous pouvez définir une méthode appelée Array.hasElement() comme ceci:

Array.prototype.hasElement = function hasElement(someElement) 
{ 
    for(var i=0;i<this.length;i++) 
    { 
     if(this[i]==someElement) 
      return true; 
    } 
    return false; 
} 

Et puis l'appeler comme ceci:

if(!["One","Two","Three"].hasElement(myVar)) 
{ 
    //do stuff 
} 

note: testé uniquement dans Firefox, où cela fonctionne parfaitement.