2016-04-10 4 views
2

Ich habe eine if Anweisung mit 2 Bedingungen. Aus irgendeinem Grund ändert sich die Hintergrundfarbe zu rot und niemals zu schwarz.Überprüfen Hintergrundfarbe in if-Anweisung

$(".circles").click(function() { 
    counter++; 
    if (counter % 2 === 0 && $(this).css("background-color")=="#FFFFFF") { 
     $(this).css("background-color", "black"); 
    } else { 
     $(this).css("background-color", "red"); 
    } 
}) 

Die .circles auf #FFFFFF ursprünglich gesetzt. Was ist los?

+0

'$ (this) .css (" background-color ")' wird wahrscheinlich 'rgb (255,255,255)' sein. Vertraue niemals Farben. – Oriol

+1

Zusätzlich zu Oriols Kommentar, anstatt den Farbwert zu testen (was im besten Fall zuverlässig ist), weisen Sie CSS-Klassen die angegebenen Hintergrundfarben zu und verwenden 'toggleClass()', um Klassen von einer zur anderen zu wechseln. –

+0

Wie lautet Ihr anfänglicher Wert für die Variable Zähler? Was ist die Reihenfolge, die Sie erhalten möchten: weiß, schwarz, rot, rot, rot oder weiß, schwarz, rot, schwarz, rot oder etwas anderes? – skobaljic

Antwort

2

Der Browser wahrscheinlich Sie geben zurück rgb Farbe, wenn Sie css("background-color") Methode verwenden, aber das ist nicht sicher. Wenn Sie sicher sein wollen, als mit weißen Hintergrund ein Element erstellen und nutzen Sie seine Eigenschaft:

var whiteColor = $('<div/>').css({ 
 
    backgroundColor: '#fff' 
 
}).css('backgroundColor'); 
 
var counter = 0; 
 
$(".circles").click(function() { 
 
    counter++; 
 
    if (counter % 2 === 0 && $(this).css("background-color") == whiteColor) { 
 
     $(this).css("background-color", "black"); 
 
    } else { 
 
     $(this).css("background-color", "red"); 
 
    } 
 
})
.circles { 
 
    background-color: #FFFFFF; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="circles" style="background-color: #fff;"> 
 
    Click me 
 
</div>

Credits this answer.

Auch auf this Fiddle.

+0

Warum würden Sie ein Stub-Element erstellen, um seine Farbe bei Bedarf statt Klassen zu erhalten? – FredMaggiowski

+0

Ich würde es nicht so machen, ich folge nur der Frage, also hat meine Antwort Sinn. Theoretisch ist es dem Programmierer unter Umständen nicht gestattet, die Stile zu ändern, oder diese müssen von einer höheren Instanz genehmigt werden. – skobaljic

+0

Danke, dies war der leichtere Weg für mich, weil es nicht bedeutete, dass ich meinen Code neu erstellte und ich jeden Schritt verstand. – Naomi

2

Ich habe versucht, das tatsächliche Ergebnis des Aufrufs zu protokollieren:

$(this).css("background-color") 

Das Ergebnis (auf Chrome) war: rgb(255,255,255) damit es aus dem String "#FFFFFF" unterscheidet.

Auch das Problem mit dem counter ist, dass, wenn es eine ungerade Zahl ist Sie die Hintergrundfarbe auf rot gesetzt, wenn es der Hintergrund-Farbe Rot eine gerade Zahl ist, ist [Rückkehr rgb(255,0,0)] und somit ist es anders aus "#FFFFFF".

Hier ist ein Fiddle.

Ich würde Ihnen vorschlagen, eine andere Art von Spiel mit .. Sie zum Beispiel Klassen auf Klick und nutzen den zusätzlichen Klassen Wähler wechseln konnte die background-color

Verwendung Klassen statt $(this).css(..) == "a color string" innerhalb der IF Zustand zu verändern bedeutet, dass Sie können eine .white Klasse erstellen, die Ihr Artikel am Anfang hat. Wenn Sie darauf klicken, wenn es .white Klasse hat, als Sie seine Farbe eine andere Klasse mit ändern .red (Klassennamen sind Beispiele, nur um sie nennen, wie Sie wollen)

Die Klassen nur die background-color in Ihrer CSS-Datei ändern, damit festgelegt werden sie ‚ll so etwas wie:

.white{ 
    background-color: #FFFFFF 
} 

.red{ 
    background-color: #FF0000 
} 
+0

das Problem ist nicht der Zähler. Der Zähler funktioniert so, wie er sollte. Ich möchte die Hintergrundfarbe nicht ändern können. Ich will es nur einmal wechseln. Das ist das Problem. – Naomi

+0

Das Problem ist, wie Sie die Farbanpassung innerhalb der 'IF' Bedingung und die Farbumschaltung über jQuery handhaben, sollten Sie definitiv Klassen anstelle von' $ (this) .css (..) == "Eine Farbzeichenfolge" verwenden '. Zum Beispiel können Sie eine '.white' Klasse erstellen, die Ihren Artikel am Anfang hat. Wenn sie angeklickt wird, wenn sie eine '.white' Klasse hat, dann ändern Sie ihre Farbe mit einer anderen Klasse'.rot (Klassennamen sind Beispiele, benenne sie einfach nach deinen Wünschen) – FredMaggiowski

+1

ah, jetzt verstehe ich, was du meinst. Ja, das klingt nach einem guten Weg, es zu tun. Ich werde es versuchen. Danke – Naomi