if in switch() umwandeln, kann mir jemand helfen?
lousypoetry
- javascript
0 Carsten0 lousypoetry0 Tobias Kloth0 Carsten
0 Struppi0 lousypoetry0 Struppi
Hallo!
Ich habe eine Funktion, die sehr viele if-abfragen verknüpft, sie funktioniert zwar, ist aber unübersichtlich:
function pruefen()
{
if(zaehler == 0 && window.document.quiz.auswahl[1].checked == true)
{document.getElementById("zwei").style.backgroundColor = "#FF8080";
document.getElementById("eins").style.backgroundColor = "#0080FA";}
else
if(zaehler == 1 && window.document.quiz.auswahl[1].checked == true)
{document.getElementById("drei").style.backgroundColor = "#FF8080";
document.getElementById("zwei").style.backgroundColor = "#0080FA";}
else
if(zaehler == 2 && window.document.quiz.auswahl[2].checked == true)
{document.getElementById("vier").style.backgroundColor = "#FF8080";
document.getElementById("drei").style.backgroundColor = "#0080FA";}
}
darum hab ich versucht, sie in eine switch()-funktion umzuformen, scheitere aber an dem problem, dass ich die bedingung nach dem && nicht umgeformt bekomme. Kann mir da vielleicht jemand bei helfen? Danke!
Hi,
darum hab ich versucht, sie in eine switch()-funktion umzuformen, scheitere aber an dem problem, dass ich die bedingung nach dem && nicht umgeformt bekomme.
Völlig zu recht: Das lässt sich so nicht direkt umformen!
Es ginge nur so:
switch(zaehler)
{
case 0:
if(window.document.quiz.auswahl[1].checked == true)
{
document.getElementById("zwei").style.backgroundColor = "#FF8080";
document.getElementById("eins").style.backgroundColor = "#0080FA";
}
break;
....
aber ob das besser ist?
Gruss,
Carsten
Völlig zu recht: Das lässt sich so nicht direkt umformen!
Es ginge nur so:switch(zaehler)
{
case 0:
if(window.document.quiz.auswahl[1].checked == true)
{
document.getElementById("zwei").style.backgroundColor = "#FF8080";
document.getElementById("eins").style.backgroundColor = "#0080FA";
}
break;
....aber ob das besser ist?
ja, so hatte ichs auch schon überlegt. hm, dann lass ichs glaub ich so wies ist, ich dachte vielleicht gibts da ne elegante lösung. ;)
Danke!
Hallo Carsten,
case 0:
if(window.document.quiz.auswahl[1].checked == true)
die if-Bedingung würde ich vor switch setzen, da sie jedesmal vorkommt.
document.getElementById("zwei").style.backgroundColor = "#FF8080";
document.getElementById("eins").style.backgroundColor = "#0080FA";
das lässt sich vielleicht mit (ungetestet):
---
function farbe(id,farbnr){
farben = new Array("#FF8080","#0080FA");
document.getElementById(id).style.backgroundColor = farben[farbnr];
}
//und als Aufruf:
farbe('zwei',0);
farbe('eins',1);
---
kürzen.
Grüße aus Nürnberg
Tobias
Hi Tobias,
die if-Bedingung würde ich vor switch setzen, da sie jedesmal vorkommt.
Nein, eine der drei Bedingungen ist anders - das ist ja das 'Problem'
Gruss,
Carsten
Hallo Carsten,
die if-Bedingung würde ich vor switch setzen, da sie jedesmal vorkommt.
Nein, eine der drei Bedingungen ist anders - das ist ja das 'Problem'
stimmt, du hast recht - dann bleibt wohl nur noch das Kürzen des getElementById()-Zeugs :-)
Grüße aus Nürnberg
Tobias
Hallo!
Ich habe eine Funktion, die sehr viele if-abfragen verknüpft, sie funktioniert zwar, ist aber unübersichtlich:
ich glaube, das du das wesentlich eleganter lösen könntest. Die Frage ist nur, ob du wirklich zwei Bereiche farblich unterlegen willst oder ob du einfach nur eines wieder die defaultfarbe zuweisen möchtest und eines unterlegen, dann würde es so wesentlich einfacher gehen:
<script type="Text/JavaScript">
var obj;
function pruefen(e)
{
if(obj && obj.style) obj.style.backgroundColor = "#FF8080";
obj = document.getElementById(e.value);
if(obj && obj.style) obj.style.backgroundColor = "#0080FA";
}
</script>
</head>
<body >
<form>
<input type="radio" name="auswahl" value="auswahl1" onclick="pruefen(this)";>
<input type="radio" name="auswahl" value="auswahl2" onclick="pruefen(this)";>
<input type="radio" name="auswahl" value="auswahl3" onclick="pruefen(this)";>
<div id="auswahl1">Auswahl 1</div>
<div id="auswahl2">Auswahl 2</div>
<div id="auswahl3">Auswahl 3</div>
</form>
Struppi.
ich glaube, das du das wesentlich eleganter lösen könntest. Die Frage ist nur, ob du wirklich zwei Bereiche farblich unterlegen willst oder ob du einfach nur eines wieder die defaultfarbe zuweisen möchtest und eines unterlegen,
ja, genau das will ich eigentlich!
dann würde es so wesentlich einfacher gehen:
<script type="Text/JavaScript">
var obj;function pruefen(e)
{
if(obj && obj.style) obj.style.backgroundColor = "#FF8080";
obj = document.getElementById(e.value);
if(obj && obj.style) obj.style.backgroundColor = "#0080FA";
}
</script>
</head>
hm, ich glaub, da musst du mir nochmal kurz helfen. Wieso denn erst
var obj;
und dann später noch mal obj = document.getElementById(e.value);
und das mit dem 'e' hab ich auch nicht so ganz verstanden (steht das in selfHTML? hab schon gesucht, aber nicht gefunden).
ich glaube, das du das wesentlich eleganter lösen könntest. Die Frage ist nur, ob du wirklich zwei Bereiche farblich unterlegen willst oder ob du einfach nur eines wieder die defaultfarbe zuweisen möchtest und eines unterlegen,
ja, genau das will ich eigentlich!
hab ich mir fast gedacht ;-)
dann würde es so wesentlich einfacher gehen:
<script type="Text/JavaScript">
var obj;function pruefen(e)
{
if(obj && obj.style) obj.style.backgroundColor = "#FF8080";
obj = document.getElementById(e.value);
if(obj && obj.style) obj.style.backgroundColor = "#0080FA";
}
</script>
</head>hm, ich glaub, da musst du mir nochmal kurz helfen. Wieso denn erst
var obj;
Damit wird eine globale Variabel deklariert, die die ganze Zeit gültig ist, d.h. beim 2. Aufruf hast sie immer noch den Wert des vorherigen Aufrufs.
und dann später noch mal obj = document.getElementById(e.value);
Damit wird dann der globalen Variabeln, nachdem die Farbe wieder auf den ursprung gesetzt wird, mit dem Neuen Element gefüllt.
und das mit dem 'e' hab ich auch nicht so ganz verstanden (steht das in selfHTML? hab schon gesucht, aber nicht gefunden).
'e' ist einfach ein Funktionsarameter.
In diesem Falle ist es eine Referenz auf den Radiobutton der angegklickt wird.
Struppi.