Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Problem mit if...else-Anweisung
Frage
<script type="text/javascript">
function change(element) {
if (element.style.background != "#baa"){
element.style.background = "#c00";
}
else {
element.style.background = "#baa";
}}
</script>
<input type="button" style="background:#baa" onclick="change(this)">
... die farbe dieses buttons soll bei anklicken immer zwischen 2 farben wechseln... problem ist, dass die else-anweisung nicht zur wirkung kommt, da ich irgendeinen fehler bei der bedingung gemacht habe. der computer sieht die bedingung also fälschlicherweise immer als erfüllt an und führt die if-anweisung aus.
was muss ich ändern?
Antwort 1 von logikfehler
hi
ich seh auf Anhieb zwei Dinge, die mich verwirren:
Du hast zwei schließende klammern am Ende.
Eine davon kannst du streichen, da die Syntax
if ( ) {
}
else {
}
wäre.
Außerdem würde ich die Farben mit 6 Stellen schreiben, also #RRGGBB und nicht nur #RGB
Im Übrigen weiß ich nicht, wie hier überhaupt eine Abfrage entstehen soll :
Die Ausgangsfarbe des Buttons ist ja schon #baa - d.h. die if-Anweisung kann nie false werden.
ich seh auf Anhieb zwei Dinge, die mich verwirren:
Du hast zwei schließende klammern am Ende.
Eine davon kannst du streichen, da die Syntax
if ( ) {
}
else {
}
wäre.
Außerdem würde ich die Farben mit 6 Stellen schreiben, also #RRGGBB und nicht nur #RGB
Im Übrigen weiß ich nicht, wie hier überhaupt eine Abfrage entstehen soll :
Die Ausgangsfarbe des Buttons ist ja schon #baa - d.h. die if-Anweisung kann nie false werden.
Antwort 2 von son_quatsch
Deine zwei geschweiften Klammern sind schon richtig (eine zum beenden des IF-Konstrukts und eine zum beenden der Funktion).
Der Fehler liegt im CSS und auch darin, was der Browser draus macht. Die CSS-Eigenschaft "background" ist eine Zusammenfassung aus background-color, background-image, background-position... usw. Du solltest also zumindest erstmal nur die Farbe überprüfen, nämlich
Desweiteren muss der Browser nicht deine Farbangabe wortgenau übernehmen. Er wird zumindest #bbaaaa draus machen - und im Zweifelsfall das ganze immer in Großbuchstaben. Entweder sicherst du dich damit ab, indem du alles in Kleinbuchstaben und ausgeschrieben vergleichst, wie z.B.:
...oder überprüfst generell erst einmal, was dir backgroundColor in den verschiedenen Browsern (MSIE, FFOX, OPER) so zurückliefert:
Der Fehler liegt im CSS und auch darin, was der Browser draus macht. Die CSS-Eigenschaft "background" ist eine Zusammenfassung aus background-color, background-image, background-position... usw. Du solltest also zumindest erstmal nur die Farbe überprüfen, nämlich
element.style.backgroundColorDesweiteren muss der Browser nicht deine Farbangabe wortgenau übernehmen. Er wird zumindest #bbaaaa draus machen - und im Zweifelsfall das ganze immer in Großbuchstaben. Entweder sicherst du dich damit ab, indem du alles in Kleinbuchstaben und ausgeschrieben vergleichst, wie z.B.:
if (element.style.backgroundColor.toLowerCase() == '#bbaaaa'){...oder überprüfst generell erst einmal, was dir backgroundColor in den verschiedenen Browsern (MSIE, FFOX, OPER) so zurückliefert:
alert( element.style.backgroundColor );Antwort 3 von pudw
die 2.klammer schließt die function
#RRGGBB hab ich ausprobiert, macht keinen unterschied
es war eigentlich so gedacht, dass die ausgangsfarbe #baa durch die if-anweisung zu #c00 verändert wird und so bei erneutem draufklicken die else-anweisung zur wirkung kommt.
kannst du mir eine alternative anbieten?
#RRGGBB hab ich ausprobiert, macht keinen unterschied
es war eigentlich so gedacht, dass die ausgangsfarbe #baa durch die if-anweisung zu #c00 verändert wird und so bei erneutem draufklicken die else-anweisung zur wirkung kommt.
kannst du mir eine alternative anbieten?
Antwort 4 von son_quatsch
Naja, lesen musst du schon alleine.
Antwort 5 von pudw
...das galt antwort 1
klappt jetzt... "==" war der schlüssel
klappt jetzt... "==" war der schlüssel

