ZAB: Syntaxterror I

Hallo alle miteinander!

Ich habe ein kleines Script gebastelt,
welches in der Adresszeile des Browsers,
einen String ersetzt und die Seite dann neu läd.
Ansich ganz simple mögt ihr meinen, doch für
einen Nichtprogrammierer ein schwieriges Unterfangen.

Das Script tut seine Funktion, ist aber
wohl nicht ganz sauber geschrieben, denn der IE brint
ne Fehlermeldung und der Mozilla in der JS-Konsole auch.

Hier das Script:

a = window.location.href;
function color_a()
{
if (a.indexOf('c2')!=-1)
{
a = a.replace(/c2/,"c1");
window.location.href = a;

}
else if (a.indexOf("c3")!=-1)
a = a.replace(/c3/,"c1");
window.location.href = a;
}

Es wird ein Syntaxterror angezeigt! Ich denke es hat wohl mit
schweiften Klammern zu tun, ich weiß aber nicht wieso!

Ich bitte um Hilfe!
Gruß
Sebastian

  1. Hallo,

    Es wird ein Syntaxterror angezeigt!

    geht das evtl. genauer?

    Gruss,
    Kube

    1. Hallo,

      Es wird ein Syntaxterror angezeigt!
      geht das evtl. genauer?

      Gruss,
      Kube

      Hallo Alle,

      ich werde es nächtes mal genauer beschreiben!!!

      Vielen Dank für die Hinweise. Ich habe als erstes ausprobiert, einfach
      else {} als leere Anweisung zu schreiben und das war es auch! Jetzt läuft der Kram auch ohne Fehlermeldung - supi!

      <script type="text/javascript" language="javascript">
      <!--
      a = window.location.href;
      function color_a()
      {
          if (a.indexOf('c2')!=-1)
      {
       a = a.replace(/c2/,"c1");
       window.location.href = a;
         }
          else {}
       (a.indexOf("c3")!=-1)
       a = a.replace(/c3/,"c1");
       window.location.href = a;
      }

      //-->
      </script>

      So sieht es jetzt aus. Ist doch schon übersichtlicher - oder?
      Kann mir jemand vielleicht erklären, wieso es eine leere else {}
      Anweisung sein muss und es mit else if (...) nicht klappt.

      Schon mal vielen Dank für eure Aufmerksamkeit!

      Gruß ZAB

  2. Das Script tut seine Funktion, ist aber
    wohl nicht ganz sauber geschrieben, denn der IE brint
    ne Fehlermeldung und der Mozilla in der JS-Konsole auch.

    a = window.location.href;
    function color_a()
    {
      if (a.indexOf('c2')!=-1)
        {
         a = a.replace(/c2/,"c1");
         window.location.href = a;
        }
       else
        if (a.indexOf("c3")!=-1)
           a = a.replace(/c3/,"c1");
        window.location.href = a;
    }

    Es wird ein Syntaxterror angezeigt! Ich denke es hat wohl mit
    schweiften Klammern zu tun, ich weiß aber nicht wieso!

    Bring doch etwas Struktur in Deine Programme, sie lassen sich dann wesentlich besser lesen. Weiterhin wird nicht nur ein Syntax-Fehler angezeigt, sondern normalerweise auch die Zeile oder Zeilennummer, in der der Fehler auftritt - ohne diese Info aber bleibt Außenstehenden nur eine mehr oder weniger mühselige Raterei.
    Ich für meinen Teil würde mal raten, daß da in der Tat zwei Klammernpaare fehlen, und zwar in den drei Zeilen nach dem 'else'.

    Gruß,
      soenk.e

    1. Hallo,

      else
          if (a.indexOf("c3")!=-1)
             a = a.replace(/c3/,"c1");
          window.location.href = a;
      }

      Ich für meinen Teil würde mal raten, daß da in der Tat zwei Klammernpaare fehlen, und zwar in den drei Zeilen nach dem 'else'.

      Das führt aber nicht zu einem Syntax Error. Ich vermute das es "else if" in einer Zeile heißen muss. Oder else {} als leere Anweisung und dann ein neues if.

      Gruß,
      ueps

      1. else
            if (a.indexOf("c3")!=-1)
               a = a.replace(/c3/,"c1");
            window.location.href = a;
        }

        Ich für meinen Teil würde mal raten, daß da in der Tat zwei Klammernpaare fehlen, und zwar in den drei Zeilen nach dem 'else'.

        Das führt aber nicht zu einem Syntax Error. Ich vermute das es "else if" in einer Zeile heißen muss. Oder else {} als leere Anweisung und dann ein neues if.

        Damit begebe ich mich zwar auf's Glatteis, weil ich es nicht ausprobiert habe, aber ich meine mich zu erinnern, daß eine if-Klausel, die in einem Zweig mit Klammern arbeitet auch in allen anderen Zweigen mit Klammern arbeiten muß. Das hat er nicht gemacht, daher die Fehlermeldung.

        Das es "else if" in einer Zeile heißen muß, halte ich für äußerst unwahrscheinlich, da Javascript keinen Unterschied zwischen Leerzeichen und leeren Zeichen (wie Zeilenumbrüchen und Tabulatoren) macht. Und außerdem hatte er das schon so, die Zwei-Zeilen-Umstellung oben habe ich verbrochen.

        else {} und dann if kann es nicht sein, weil dann das else überflüssig wäre.

        Gruß,
          soenk.e

        1. Moin Moin !

          Damit begebe ich mich zwar auf's Glatteis, weil ich es nicht ausprobiert habe, aber ich meine mich zu erinnern, daß eine if-Klausel, die in einem Zweig mit Klammern arbeitet auch in allen anderen Zweigen mit Klammern arbeiten muß.

          Waaah! Darauf möchte ich mich nie verlassen müssen. Es ist wesentlich einfacher, die paar Anschläge für die beiden Klammern *IMMER* zu machen, dann muß man nicht über Ausnahmen nachdenken und der Code bleibt wartbar, wenn man noch ein Statement zwischen if und else einfügen muß.

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
          1. Hallo,

            ich habe jetzt zwar zweimal fast dasselbe geschrieben,
            aber ich bin mir nicht ganz sicher, ob ihr die Antwort auf den Beitrag auch lest.  Ich möchte mich bedanken, denn das Problem ist gelöst.

            Ich habe als erstes ausprobiert, einfach
            else {} als leere Anweisung zu schreiben und das war es auch! Jetzt läuft der Kram auch ohne Fehlermeldung - supi!

            <script type="text/javascript" language="javascript">
            <!--
            a = window.location.href;
            function color_a()
            {
                if (a.indexOf('c2')!=-1)
            {
             a = a.replace(/c2/,"c1");
             window.location.href = a;
               }
                else {}
             (a.indexOf("c3")!=-1)
             a = a.replace(/c3/,"c1");
             window.location.href = a;
            }

            //-->
            </script>
            So sieht der Code jetzt aus.
            Wenn Ihr daran interessiert seid, das Script mal in Aktion zu sehen
            (wesentlich spannender als der Code), dann sagt bescheid, ich poste die URL hier im Forum.

            Noch mal vielen Danke für Eure Aufmerksamkeit!

            Gruß
            ZAB

            1. ich habe jetzt zwar zweimal fast dasselbe geschrieben,
              aber ich bin mir nicht ganz sicher, ob ihr die Antwort auf den Beitrag auch lest.  Ich möchte mich bedanken, denn das Problem ist gelöst.

              Nein, zumindest nicht mit dem Skript, daß Du unten zitiert hast.

              Ich habe als erstes ausprobiert, einfach
              else {} als leere Anweisung zu schreiben und das war es auch! Jetzt läuft der Kram auch ohne Fehlermeldung - supi!

              Es läuft jetzt zwar ohne Fehlermeldung, aber es ist nicht das, was Du haben wolltest. Du hast jetzt zwar einen leeren else-Block, aber der hat nicht das Problem gelöst, sondern die beiden Klammern im else-Block. Hättest Du die Klammern um die Anweisungen geschrieben, die er bei else ausführen soll, wäre die Fehlermeldung sicherlich auch verschwunden.

              Was Du jetzt machst, ist in mehreren Teilen unsinnig. Erstens kannst Du statt einem leeren, nichts tuenden else das else auch gleich weglassen, zweitens hast Du in Zeile 11 eine Anweisung, die überhaupt keine Funktion hat. Du vergleichst dort das Ergebnis von indexOf() mit -1, lässt aber das Ergebnis dieses Vergleichs einfach im Nirvana verschwinden; keine Zuweisung an eine Variable, kein if, das es benutzt.
              Führe Dir das Skript besser nochmal genau zu Gemüte, um überhaupt zu verstehen, was dort passiert.

              1 a = window.location.href;
               2 function color_a()
               3  {
               4   if (a.indexOf('c2')!=-1)
               5     {
               6      a = a.replace(/c2/,"c1");
               7      window.location.href = a;
               8     }
               9    else
              10     {};
              11   (a.indexOf("c3")!=-1)
              12   a = a.replace(/c3/,"c1");
              13   window.location.href = a;
              14  }

              Um die Geschichte mal etwas abzukürzen: Du möchtest in window.location.href c2 und/oder c3 durch c1 ersetzen.

              window.location.href = window.location.href.replace(/c2|c3/g,"c1");

              In der Kürze liegt die Würze :)

              • window.location.href ist ein String-Objekt, d.h. Du kannst alle String-Methoden auch direkt anwenden, auch replace().
              • replace() ersetzt Textstellen. Wenn keine passenden Textstellen vorhanden sind, wird auch nichts ersetzt, von daher sind jeglich Vorprüfungen, ob eine Textstelle vorhanden ist, überflüssig.
              • replace() nimmt auch komplexe Muster an. So steht der senkrechte Strich für ein "oder". "c2|c3" bedeutet also "c2 oder c3", es wird also "c2 oder c3" durch c1 ersetzt. Damit sparst Du den zweiten replace()-Aufruf.
              • Zusätzlich: Das kleine g am Ende des Musters ("/c2|c3/g") bedeutet, daß replace() alle Vorkomnisse ersetzen soll ("c2c2c2"->"c1c1c1"). Ohne g wird nur das erste "c2" bzw. "c3" ersetzt ("c2c2c2->"c1c2c2"). Ich weiß nicht, welche Variante Du haben möchtest.

              Gruß,
                soenk.e