2016-11-10 3 views
0

Ich versuche, ein Bild erscheinen zu lassen, wenn die drei Bedingungen erfüllt sind, aber ich bekomme nur das BMW-Bild angezeigt. Ich kann einfach nicht sehen, warum das andere, wenn es nicht funktioniert, vielleicht nur zu lange betrachtet. Nach einem anderen Weg gesucht, aber nicht gefunden.Kann nicht anders, wenn Bedingung mit Bild in JS arbeiten

var name = prompt("Hello there, what's your name?"); 
var car = new Array("BMW", "Maserati"); 
var randomCar = Math.floor(Math.random()*car.length); 
var carName = car[randomCar]; 

if(name === "Frank" || name === "Chris" && carName === "BMW") { 
    document.getElementById("name").innerHTML = "<h1>Hello " + name + " you have won a " + carName + "<br><br>" + "<img src='img/bmw.jpg' alt='BMW Pic' style='border-radius: 10px;'</h1>"; 
} else if (name === "Frank" || name === "Chris" && carName === "Maserati") { 
    document.getElementById("name").innerHTML = "<h1>Hello " + name + " you have won a " + carName + "<br><br>" + "<img src='img/maserati.jpg' alt='Maserati Pic' style='border-radius: 10px;'</h1>"; 
} else { 
    document.getElementById("name").innerHTML = "<h1>Hello " + name + ", no car for you today !!" + "<br><br>" + "<img src='img/pitbull-sad-face.jpg' alt='Dog sadface' style='width: 70%; border-radius: 20px;'</h1>"; 
}; 
+0

Vielleicht sind diese Bilder nicht vorhanden. Sie haben Ihr Bild nicht geschlossen. BTW – Popnoodles

+0

Können Sie die Eingabeparameter ('name' und' carName') zu Ihrer Frage hinzufügen? –

+0

Der Code scheint [scheint zu funktionieren] (https://jsfiddle.net/h3vtajrg/)? – adeneo

Antwort

1

Die getestete Ausdruck in Ihrer if Aussage:

(name === "Frank" || name === "Chris" && carName === "BMW") 

wird als ausgewertet, wenn sie geschrieben wurden:

(name === "Frank" || (name === "Chris" && carName === "BMW")) 

Das heißt, der && Teil wird so bewertet, dass der Test gelingen, wenn der Name "Frank" ist oder wenn der Name "Chris" ist und auch der Name des Autos ist "BMW". Wenn der Name "Frank" ist, spielt der Autoname keine Rolle; es ist nur wichtig, wenn der Name "Chris" ist.

Wenn Sie den Namen immer Materie wollen, müssen Sie explizit die beiden Tests für den Namen klammern:

((name === "Frank" || name === "Chris") && carName === "BMW") 

Jetzt wird es nur gelingen, wenn der Name entweder „Frank“ oder „Chris“ und wenn der Fahrzeugname "BMW" ist.

+0

Danke für die Erklärung, jetzt klar für mich! Danke! –

1

Es ist Ihre Reihenfolge der Operationen. Was passiert ist, dass Ihre Logik if frank, or if Chris+BMW sagt, wenn Sie wirklich wollen if Frank+BMW or if Chris+BMW. Setzen Sie Klammern um die or (||) Teile.

if((name === "Frank" || name === "Chris") && carName === "BMW") { 
    document.getElementById("name").innerHTML = "<h1>Hello " + name + " you have won a " + carName + "<br><br>" + "<img src='img/bmw.jpg' alt='BMW Pic' style='border-radius: 10px;'</h1>"; 
} else if ((name === "Frank" || name === "Chris") && carName === "Maserati") { 
    document.getElementById("name").innerHTML = "<h1>Hello " + name + " you have won a " + carName + "<br><br>" + "<img src='img/maserati.jpg' alt='Maserati Pic' style='border-radius: 10px;'</h1>"; 
} else { 
    document.getElementById("name").innerHTML = "<h1>Hello " + name + ", no car for you today !!" + "<br><br>" + "<img src='img/pitbull-sad-face.jpg' alt='Dog sadface' style='width: 70%; border-radius: 20px;'</h1>"; 
}; 

Gerade jetzt, Frank wird immer einen BMW bekommen, weil die erste if Aussage, weil name==="Frank" als wahr übergeht.

+0

Danke Devin, es kann so einfach sein, aber ich habe es einfach nicht gesehen. Danke für die Erklärung! –