jürgen j.: Variable definieren in Bedingung

Hallo!

Darf ich innerhalb einer Bedingung eine Variable definieren?
Beispiel:

if(x=document.getElementsByTagName("img")){
 alert("OK")
 x[0].src = "html.gif"
 }

Das Beispiel funktioniert mit allen meinen Browsern (MSIE5, moz, opera6-7, nn4), nur nn2 meckert fürchterlich.
Ist das korrekter Code?

tschüs, jürgen

  1. Servus,

    innerhalb einer Bedingun etc. sollte man niemals eine Variable definiern Ich schätze mal Du meinst damit deklarieren.

    Welche Fehlermeldung bringt Dir den der NN?

    Ausserdem solltest Du die Variable x als Array deklarieren.
    Scheinar hast du jedoch 2 Variablen x mit unterschiedlichem Typ.

    Das mag auch nicht jeder Browser zumals NN solche Variablen public dekalriert also überall bekannt sind.

    Gruss Matze

    1. Hallo!

      Welche Fehlermeldung bringt Dir den der NN?

      nn4.7 bringt keine Fehlermedung. Das alert kommt nicht, soll auch nicht, weil er das Oblekt document.getElementsByTagName(...) nicht kennt.
      nn2.02 (ja, 2.02):
      frägt, ob ich mich vertippt habe (= statt ==) und sagt
      getElementsByTagName is not a function

      Ausserdem solltest Du die Variable x als Array deklarieren.
      Scheinar hast du jedoch 2 Variablen x mit unterschiedlichem Typ.

      Das war doch nur ein Syntax-Beispiel, ich hätte auch schreiben können:
      if (x=parent.frames.irgendwas)
      und somit gleichzeitig abfragen, ob das Fenster existiert und es x nennen.

      tschüs, jürgen

  2. Hallo Jürgen,

    Darf ich innerhalb einer Bedingung eine Variable definieren?

    Deklarieren solltest Du Sie vorher, aber den Wert darfst du in der Bedingung zuweisen.

    if(x=document.getElementsByTagName("img")){

    Mir ist zwar raetselhaft, was deine Bedingung machen soll, jedenfalls folgt hinter 'if' ein Vergleich und keine Zuweisung, mithin '==' und nicht '='.

    nur nn2 meckert fürchterlich.

    Es wird hier oefter debattiert, ob man NN4 noch unterstuetzen soll, aber nn2 klingt wirklich _verdammt_ alt. Vermutlich bist Du der einzige Mensch im ganzen Universum, der noch einen besitzt ;-)

    Dieter

    1. Hallo Dieter,

      if(x=document.getElementsByTagName("img")){
      Mir ist zwar raetselhaft, was deine Bedingung machen soll, jedenfalls folgt hinter 'if' ein Vergleich und keine Zuweisung, mithin '==' und nicht '='.

      Wenn ich das richtig sehe, weist er der Variablen x ein Array zu, das alle img-Objekte des aktuellen Dokuments enthält. Wenn das Dokument keine imgs enthält, ist das Ergebnis false. Er könnte das Ganze auch so schreiben:
      var x=document.getElementsByTagName("img");
      if (x.length == 0) {
      ...
      }

      @Jürgen: Ich sehe eigentlich nicht, warum das nicht erlaubt sein sollte.

      Grüße
      Andreas

      --
      Hier könnte Ihre Werbung stehen.
      1. Hallo Andreas,

        @Jürgen: Ich sehe eigentlich nicht, warum das nicht erlaubt sein sollte.

        Weil der Zuweisungsoperator '=' NICHT in eine Bedingung gehoert !

        Schau mal hier: http://selfhtml.teamone.de/javascript/sprache/bedingt.htm#if_else und hier: http://selfhtml.teamone.de/javascript/sprache/operatoren.htm#vergleich.

        gruesse
        rainer groth

        --
        ss:| zu:} ls:& fo:) de:] va:| ch:] n4:° rl:? br:$ js:| ie:| fl:( mo:?
        (--> einer der letzten bauhaeusler <--)
        1. Moin!

          @Jürgen: Ich sehe eigentlich nicht, warum das nicht erlaubt sein sollte.

          Weil der Zuweisungsoperator '=' NICHT in eine Bedingung gehoert !

          Warum nicht? Ist die Frage, wie die Sprache sowas interpretiert.

          In PHP geht sowas ganz wunderbar (und sorgt auch immer mal wieder für verzweifelte Programmierer):

          if (x=funktion())
          {
           blah;
          }

          Die funktion() gibt einen Wert zurück, der x zugewiesen wird. Dieser zugewiesene Wert ist gleichzeitig das Ergebnis der Zuweisung, welcher dann evaluiert wird auf true oder false. Mit anderen Worten: Wenn die Funktion 0, den Leerstring oder false zurückgibt, ist die Bedingung nicht erfüllt (und der else-Teil würde drankommen), ansonsten ist die Bedinung erfüllt, und der if-Teil kommt dran.

          Diese Methode kann auf dieselbe Weise auch wunderbar bei Javascript funktionieren. Allerdings ist es in der Tat eher als "Hack" anzusehen, dessen Wirkung nicht sofort offensichtlich wird. Es ist sinnvoller, sowas schrittweise zu machen, insbesondere, da man gerade bei der hier verwendeten Methode getElementsByTagName() erstmal feststellen sollte, ob der Browser sie überhaupt kennt (woraus auch der Fehler in Netscape 2 resultieren dürfte).

          - Sven Rautenberg

          --
          SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
          ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
          1. Hallo!

            if (x=funktion())
            {
             blah;
            }

            Es ist sinnvoller, sowas schrittweise zu machen, insbesondere, da man gerade bei der hier verwendeten Methode getElementsByTagName() erstmal feststellen sollte, ob der Browser sie überhaupt kennt

            Ja, aber gerde diese Abfrage wäre mit dieser Konstruktion gleich mit erledigt.
            nn4 reagiert ja auch wunschgemäß und tut nichts, weil er getElementsByTagName nicht kennt. Bei ihm bekannten Methoden oder Objekten führt er das Script aus, z.B.

            if(x=parent.frame.irgendeinfenstername)
              x.location.href = "blaba.html"

            (woraus auch der Fehler in Netscape 2 resultieren dürfte).

            Der Fehler in nn2 beruht darauf, daß er offenbar, im Gegensatz zu allen neueren Browsern, kein '=' in der if-Bedingung duldet und frägt, ob eine Verwechslung mit '==' vorliegt.

            tschüs, jürgen

            1. Moin!

              Es ist sinnvoller, sowas schrittweise zu machen, insbesondere, da man gerade bei der hier verwendeten Methode getElementsByTagName() erstmal feststellen sollte, ob der Browser sie überhaupt kennt
              Ja, aber gerde diese Abfrage wäre mit dieser Konstruktion gleich mit erledigt.
              nn4 reagiert ja auch wunschgemäß und tut nichts, weil er getElementsByTagName nicht kennt. Bei ihm bekannten Methoden oder Objekten führt er das Script aus, z.B.

              Hm. Ich bin eigentlich gewohnt, dass man zuerst mal feststellt, ob ein Browser überhaupt eine Methode kennt, indem man den Wahrheitswert von (in diesem Fall) document.getElementsByTagName feststellt. Erst wenn das "wahr" ergibt, kann man die Methode auch anwenden durch document.getElementsByTagName("img"). Weil logischerweise das Elemente-Array niemals existieren kann, wenn getElementsByTagName() nicht existiert, sondern der Browser eher mit einer Fehlermeldung aussteigen sollte.

              - Sven Rautenberg

              --
              SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
              ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
              1. Hallo!

                Hm. Ich bin eigentlich gewohnt, dass man zuerst mal feststellt, ob ein Browser überhaupt eine Methode kennt, indem man den Wahrheitswert von (in diesem Fall) document.getElementsByTagName feststellt.

                Ja, ich natürlich auch!

                Erst wenn das "wahr" ergibt, kann man die Methode auch anwenden durch document.getElementsByTagName("img"). Weil logischerweise das Elemente-Array niemals existieren kann, wenn getElementsByTagName() nicht existiert, sondern der Browser eher mit einer Fehlermeldung aussteigen sollte.

                Sollte vielleicht, tut aber nicht. Weil die Browser das klaglos mitmachen, ist meine Frage entstanden.
                Hätt ja sein können, daß sowas nicht nur ein hack, sondern "höheres" Scripting ist und manche Leute das so verwenden.

                tschüs, jürgen

                1. Hallo Jürgen,

                  Weil die Browser das klaglos mitmachen, ist meine Frage entstanden.

                  Ob die anderen Browser das so klaglos mitmachen, da bin ich nicht so sicher. Hast Du wirklich z.B. bei Netscape 4.x in der Javascriptkonsole nachgeschaut, ob da irgendwelche Fehler stehen?

                  Grüße
                  Andreas

                  --
                  Hier könnte Ihre Werbung stehen.
                  1. Hallo Andreas!

                    Ob die anderen Browser das so klaglos mitmachen, da bin ich nicht so sicher. Hast Du wirklich z.B. bei Netscape 4.x in der Javascriptkonsole nachgeschaut, ob da irgendwelche Fehler stehen?

                    Kein Fehler in irgendeiner Javascriptkonsole.

                    Aber das Beispiel mit getElementsByTagName ist schlecht gewählt.
                    Besser ist das:

                    <img src="bild01.gif" name="testbild" width=200 height=100>

                    <script>
                    if (y=document.images.testbild)
                       setTimeout("y.src='bild02.gif'", 2222)
                    else alert(document.images[0].name)
                    </script>

                    Wenn der Name des Bildes richtig ist, wird nach 2sec das bild getauscht,
                    wenn der Name falsch ist, wird der Richtige ausgegeben.

                    Das habe ich jetzt nochmal geprüft, läuft einwandfrei ohne jede Fehlermeldung mit MSIE5, opera6-7, nn4.7, moz1.2-1.4

                    tschüs, jürgen

                    1. Hallo Jürgen,

                      Sieht so aus, als hättest Du jetzt zwei Möglichkeiten:

                      1. Ignoriere NN2.
                      2. Nimm die Zuweisung aus der Bedingung raus.

                      Ich persönlich tendiere ja zu Möglichkeit 1, aber wenn Du (aus welchen Gründen auch immer) NN2-Benutzer berücksichtigen musst, dann kommt natürlich nur Möglichkeit 2 in Frage.

                      Grüße
                      Andreas

                      --
                      Hier könnte Ihre Werbung stehen.
          2. Hallo Sven,

            Diese Methode kann auf dieselbe Weise auch wunderbar bei Javascript funktionieren.

            Ja.

            Allerdings ist es in der Tat eher als "Hack" anzusehen, dessen Wirkung nicht sofort offensichtlich wird.

            Als Hack würde ich das nicht bezeichnen. Warum zwei oder mehr Zeilen schreiben, wenn es auch in einer geht. Solange Du weißt was Du tust...

            [...] da man gerade bei der hier verwendeten Methode getElementsByTagName() erstmal feststellen sollte, ob der Browser sie überhaupt kennt (woraus auch der Fehler in Netscape 2 resultieren dürfte).

            Stmmt natürlich. Dumm von mir.

            Grüße
            Andreas

            --
            Hier könnte Ihre Werbung stehen.
    2. Hallo!

      if(x=document.getElementsByTagName("img")){
      Mir ist zwar raetselhaft, was deine Bedingung machen soll, jedenfalls folgt hinter 'if' ein Vergleich und keine Zuweisung, mithin '==' und nicht '='.

      Ich will gleichzeitig abfragen, ob der Browser z.B das Objekt kennt und dem Objekt einen kurzen Namen geben.
      Das kann man selbstverständlich alles anders lösen, die Frage ist eher theoretisch.

      Es wird hier oefter debattiert, ob man NN4 noch unterstuetzen soll, aber nn2 klingt wirklich _verdammt_ alt.

      Naja, mit nn2 hat immerhin alles angefangen, was wir heute erdulden müssen.

      Vermutlich bist Du der einzige Mensch im ganzen Universum, der noch einen besitzt ;-)

      Du brauchst nicht neidisch sein:
      http://netscape.com/download/archive.html
      Patch für win98, deutsch.

      Danke, jürgen