Ce code fonctionne bien si ($ (this) .val () == “Spine”) mais pas ($ (this) .val () == “Spine” || “Brian”)

Ce code fonctionne ($(this).val() == "Spine") si ($(this).val() == "Spine") mais si ($(this).val() == "Spine"||"Brian") le menu de sélection se ferme puis s’ouvre. à nouveau lorsque la sélection de "optionbodyRegion" == "" Qu’est-ce que je fais mal

 $("#optionbodyRegion").change(function(){ if ($(this).val() == "Spine"||"Brain") { document.getElementById('optioncontrast').options[0]=new Option("Select", "", false, false) document.getElementById('optioncontrast').options[1]=new Option("With", "With", false, false) document.getElementById('optioncontrast').options[2]=new Option("Without", "Without", false, false) document.getElementById('optioncontrast').options[3]=new Option("With and Without", "With and Without", false, false) $("#contrast").slideDown("fast"); //Slide Down Effect } else { if ($(this).val() == "" ) { $("#contrast").slideUp("fast"); //Slide Up Effect } } }); 

Vous utilisez une syntaxe incorrecte lors de l’utilisation de la logique ou || opérateur

Changement

  if ($(this).val() == "Spine"||"Brain") { 

À

 if ($(this).val() == "Spine"|| $(this).val() == "Brain") { 

Vous pouvez utiliser value avec un object javascript au lieu de val () de l’object jquery, comme l’a suggéré Fabrício Matté. Cela vous donnerait un avantage de performance.

 if (this.value == "Spine" || this.value == "Brain") 

Vous devez indiquer une condition / un test complet de chaque côté du «OU».

 if($(this).val() == "Spine" || $(this).val() == "Brain") 

essayez ce code:

  if (($(this).val() == "Spine")||($(this).val() =="Brain"))) 

Ce que vous cherchez, c’est:

 if ($(this).val() == "Spine"|| $(this).val() == "Brain") 

En l’état, votre code comporte une erreur concernant la priorité de l’opérateur. Je vous recommande de consulter https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence.

Votre version retournera toujours la valeur true, car toute chaîne de longueur différente de zéro aura la valeur true si elle est utilisée dans un contexte booléen. Il existe de nombreux articles sur le comportement original de Javascript en matière d’évaluation booléenne. Vous trouverez un aperçu de base de certaines des plus courantes sur http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

J’utiliserais une approche différente. Surtout si la liste s’allonge. Si vous obtenez une liste qui comporte plusieurs parties, la condition devient laide.

 var parts = ["Spine", "Brain"]; var value = $(this).val(); if($.inArray(value, parts) > -1){ //do something } 

ou utiliser un boîtier de commutateur

 $("#optionbodyRegion").change(function(){ switch ($(this).val()) { case "Spine": case "Brain": document.getElementById('optioncontrast').options[0]=new Option("Select", "", false, false) document.getElementById('optioncontrast').options[1]=new Option("With", "With", false, false) document.getElementById('optioncontrast').options[2]=new Option("Without", "Without", false, false) document.getElementById('optioncontrast').options[3]=new Option("With and Without", "With and Without", false, false) $("#contrast").slideDown("fast"); //Slide Down Effect break; case "": $("#contrast").slideUp("fast"); //Slide Up Effect break; default: break; }