lousypoetry: if in switch() umwandeln, kann mir jemand helfen?

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!

  1. 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

    1. 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!

    2. 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

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      1. 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

        1. 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

          --
          Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  2. 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.

    1. 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).

      1. 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.