Matthias: For...Next - schleifchen

hallo zusammen,

bin js-anfänger, hab' mich hier und im im self-html umgesehen, aber keinen passenden tipp gefunden

ich habe aus einem buch die folgenen funktionen, die genau das tun, was sie sollen.

function showLayer(x){
  if (document.layers)
    document.layers[x].visibility="show";
  else
    document.all[x].style.visibility="visible";
  }

function hideLayer(x){
  if (document.layers)
    document.layers[x].visibility="hide";
  else
    document.all[x].style.visibility="hidden";
  }

ich habe ein menü aus sechs punkten, die ich über diese funktionen ein- bzw. ausblenden könnte. da ich aber nun nich weiß, welche ebene gerade sichbar ist, dachte ich, ich könnte mit einer For...Next - schleife zunächst alle ebenen ausblenden und dann die richtige ebene über einen entsprechenden übergabe-parameter im funtionsaufruf einblenden.

wenn ich aber nun mit einer For...Next - schleife das [x] "laufen" lasse,

for (i=0;i<=5;i++) {
  document.layers[i].visibility="hide";
  ... bzw. ...
  document.all[i].style.visibility="hidden";
}

passiert nix, d.h. alle sichtbaren ebenen bleiben sichtbar. hab' schon alles mögliche ausprobiert, wohl aber nicht die richtige syntax getroffen. an einer anderen stelle funtioniert eine For...Next - schleife, deren aufbau ist mir klar. ich denke, es stimmt der zugriff auf die ojekthierarchie nicht.

vielen dank für hinweise

matthias

  1. Hallo Matthias!

    function showLayer(x){
      if (document.layers)
        document.layers[x].visibility="show";
      else
        document.all[x].style.visibility="visible";
      }

    function showLayer(x){
      if (document.layers) {
      document.layers[x].visibility="show";
      }
      else {
      document.all[x].style.visibility="visible";
      }
      }

    function hideLayer(x){
      if (document.layers)
        document.layers[x].visibility="hide";
      else
        document.all[x].style.visibility="hidden";
      }

    function hideLayer(x){
      if (document.layers) {
      document.layers[x].visibility="hide";
      }
      else {
      document.all[x].style.visibility="hidden";
      }
      }

    Man beachte die '{' und '}'
    ;)

    Gruß Julian

    1. Moin!

      Man beachte die '{' und '}'
      ;)

      Ja, und schmeisse die ueberfluessigen, die Du gerade reingemacht hast, umgehend wieder raus, damit man den Quelltext besser lesen kann. Was sollte der Quatsch jetzt?

      So long

      1. hör mal,

        das hier ist "mein" thread mit einer frage, die mich ernsthaft beschäftigt und für die ich hier gerne eine lösung bekommen würde.

        wenn man sich die mühe macht, und einmal deine ergüsse hier unter die lupe nimmt, dann sind das in der mehrzahl arrogante und besserwisserische kommentare, die nur sehr selten einen geistigen mehrwert beinhalten.

        schon lustig, wofür manche menschen zeit haben. vielleicht aber auch der grund dafür, dass die datenleitungen oft so verstopft sind, wenn soviel unfug darüber versendet wird.

        gruß
        matthias

        1. Hi,

          das hier ist "mein" thread mit einer frage, die mich ernsthaft beschäftigt und für die ich hier gerne eine lösung bekommen würde.

          und das versuchst Du zu erwirken, indem Du die Regulars dieses Forums von der Seite anmachst? Interessante Taktik.

          wenn man sich die mühe macht, und einmal deine ergüsse hier unter die lupe nimmt, dann sind das in der mehrzahl arrogante und besserwisserische kommentare, die nur sehr selten einen geistigen mehrwert beinhalten.

          Diese Äußerung läßt darauf schließen, daß Du die Mehrzahl Calocybes Antworten nicht verstehst. Seine Fachkompetenz ist - denke ich - unbestritten; und sein Einwand war völlig berechtigt. Wenn Dir sein Ton nicht gefallen hat, der im übrigen nicht Dir galt, dann solltest Du vielleicht überdenken, ob Du das Problem diskutiert haben oder lieber locker quatschen willst.

          schon lustig, wofür manche menschen zeit haben. vielleicht aber auch der grund dafür, dass die datenleitungen oft so verstopft sind, wenn soviel unfug darüber versendet wird.

          Die hilfreichsten Antworter sind also schuld dafür, daß immer mehr Bandbreite verschwendet wird. Was soll man da noch sagen.

          Cheatah

        2. hör mal,

          Gut, dass Du's sagst.

          das hier ist "mein" thread mit einer frage, die mich ernsthaft beschäftigt und für die ich hier gerne eine lösung bekommen würde.

          Was hat das mit dem Posting zu tun, auf das ich mich bezogen habe?

          Vielleicht ist es Dir nicht klar, aber diese Postings hier werden von mehreren hundert Leuten gelesen, noch nicht mitgezaehlt die, die die Artikel spaeter im Forumsarchiv nachlesen. Da finde ich es besser, dass keiner durch solche Postings wie die von Julian verunsichert wird. Und deswegen werde ich bei fachlich falschen Postings auch weiterhin protestieren, egal ob das fuer *Dich* einen Mehrwert darstellt oder nicht.

          Was man aus dem Rest Deines Textes schliessen kann, hat Dir Cheatah ja schon dargelegt.

          So long

          1. Vielleicht ist es Dir nicht klar, aber diese Postings hier werden von mehreren hundert Leuten gelesen, noch nicht mitgezaehlt die, die die Artikel spaeter im Forumsarchiv nachlesen. Da finde ich es besser, dass keiner durch solche Postings wie die von Julian verunsichert wird. Und deswegen werde ich bei fachlich falschen Postings auch weiterhin protestieren, egal ob das fuer *Dich* einen Mehrwert darstellt oder nicht.

            nur: der ton macht die musik! man kann's so und so sagen. und ich denke, auch bei "berechtigter" kritik an einem posting sollte man die form waren und nicht einfach flappsig von "Quatsch" reden. der letzte satz war arrogant und überflüssig!

            Was man aus dem Rest Deines Textes schliessen kann, hat Dir Cheatah ja schon dargelegt.

            ganz einfach: meine meinung!

            1. nur: der ton macht die musik! man kann's so und so sagen. und ich denke, auch bei "berechtigter" kritik an einem posting sollte man die form waren und nicht einfach flappsig von "Quatsch" reden. der letzte satz war arrogant und überflüssig!

              "wieso? was geht nicht? dass ich das sage, was ich denke?"
              "ganz einfach: meine meinung!"

    2. sorry,

      aber das war nicht die frage.

      ich sagte ja, die beiden funktionen l_a_u_f_e_n! man braucht keine {} wenn's nur um eine anweisung geht (steht zwar nicht in self-html, aber an anderer stelle).

      mein problem ist die For...Next - schleife!!! da stimmt was nicht.

      trotzdem danke für die nachricht

      matthias

      Hallo Matthias!

      function showLayer(x){
        if (document.layers)
          document.layers[x].visibility="show";
        else
          document.all[x].style.visibility="visible";
        }

      function showLayer(x){
        if (document.layers) {
        document.layers[x].visibility="show";
        }
        else {
        document.all[x].style.visibility="visible";
        }
        }

      function hideLayer(x){
        if (document.layers)
          document.layers[x].visibility="hide";
        else
          document.all[x].style.visibility="hidden";
        }

      function hideLayer(x){
        if (document.layers) {
        document.layers[x].visibility="hide";
        }
        else {
        document.all[x].style.visibility="hidden";
        }
        }

      Man beachte die '{' und '}'
      ;)

      Gruß Julian

  2. Hi,

    ich habe aus einem buch die folgenen funktionen, die genau das tun, was sie sollen.

    Fehler ausgeben, wenn der Browser weder document.layers noch document.all kennt, wie es sowohl bei älteren als auch bei den neueren Browsern wie Netscape 6 der Fall ist?

    for (i=0;i<=5;i++) {
      document.layers[i].visibility="hide";
      ... bzw. ...
      document.all[i].style.visibility="hidden";
    }

    Wenn das "... bzw. ..." im Code steht, ist der Fall klar; ansonsten solltest Du vielleicht den _exakten_ Code posten (copy & paste). Laß Dir testweise an geeigneter Stelle auch mal alert(i) ausgeben; dann weißt Du wenigstens, ob und wie weit die Schleife überhaupt durchgegangen wird.

    Cheatah

    1. hallo.

      Fehler ausgeben, wenn der Browser weder document.layers noch document.all kennt,

      ok, aber soweit bin ich ja noch gar nicht

      wie es sowohl bei älteren als auch bei den neueren Browsern wie Netscape 6 der Fall ist?

      s.o.

      for (i=0;i<=5;i++) {
        document.layers[i].visibility="hide";
        ... bzw. ...
        document.all[i].style.visibility="hidden";
      }

      Wenn das "... bzw. ..." im Code steht, ist der Fall klar;

      sooo anfänger bin ich nun auch nicht.

      ansonsten solltest Du vielleicht den _exakten_ Code posten

      da ich den exakten code ja gerade hier suche, stellt obiger code quasi die diskussionsgrundlage dar. ich weiß nun mal nicht, wo der fehler liegt. so, wie ich ihn hier präsentiere (ohne ... bzw. ...) läuft's nicht und auch anderers, was ich ausprobiert habe, geht nicht.

      Laß Dir testweise an geeigneter Stelle auch mal alert(i) ausgeben; dann weißt Du wenigstens, ob und wie weit die Schleife überhaupt durchgegangen wird.

      ich sagte ja, das prinzip der schleife ist mir klar (und die läuft auch richtig). der fehler muss im zugriff auf die objekte liegen.

      trotzdem danke für die nachricht.

      gruß
      matthias

      Cheatah

      1. Hi,

        Fehler ausgeben, wenn der Browser weder document.layers noch document.all kennt,
        ok, aber soweit bin ich ja noch gar nicht

        darum ja auch der Hinweis, daß das Script noch ausbaufähig (und -nötig) ist.

        Wenn das "... bzw. ..." im Code steht, ist der Fall klar;
        sooo anfänger bin ich nun auch nicht.

        man Sarkasmus

        ansonsten solltest Du vielleicht den _exakten_ Code posten
        da ich den exakten code ja gerade hier suche, [...] und auch anderers, was ich ausprobiert habe, geht nicht.

        Da Dein Ansatz im Prinzip korrekt ist, möchte ich von Dir einen nicht funktionierenden Code sehen, damit man dort nach einem Fehler suchen kann.

        Laß Dir testweise an geeigneter Stelle auch mal alert(i) ausgeben; dann weißt Du wenigstens, ob und wie weit die Schleife überhaupt durchgegangen wird.
        ich sagte ja, das prinzip der schleife ist mir klar (und die läuft auch richtig).

        Hast Du das verifiziert, oder glaubst Du das nur?

        der fehler muss im zugriff auf die objekte liegen.

        Dazu wäre es sinnvoll zu erfahren, wo die Schleife abbricht. Wenn sie in einem anderen Kontext läuft als die funktionierende Routine, z.B. innerhalb eines Layers, wäre das natürlich auch gut zu wissen.

        Cheatah

        1. hallo

          einen fehler hab' ich mittlerweile (code s.u.):
          #ebene1  { position: absolute; top: 100px; left: 100px; width: 40px; height: 40px; }
          hatte hier hinten noch "visibility: visible" stehen. jetzt, wo das weg ist geht's im NS einwandfrei.

          im IE hab' ich noch das problem, dass er mir auch die aufrufenden "alle weg" und alle her" ausblendet.

          darum ja auch der Hinweis, daß das Script noch ausbaufähig (und -nötig) ist.

          darum bin ich ja hier

          man Sarkasmus

          dito

          Da Dein Ansatz im Prinzip korrekt ist, möchte ich von Dir einen nicht funktionierenden Code sehen, damit man dort nach einem Fehler suchen kann.

          ok:

          <html>
          <head>
            <title>test</title>

          <script language="JavaScript">
            <!--
              ns4 = (document.layers)? true:false;
              ie4 = (document.all)? true:false;

          function hide() {
                for (i=0;i<=5;i++) {
                  if (ns4) {
                    document.layers[i].visibility="hide";
                    // alert("i(ns): " + i);
                  }
                  if (ie4) {
                    document.all[i].style.visibility="hidden";
                    // alert("i(ie): " + i);
                  }
                }
              }

          function show() {
                for (i=0;i<=5;i++) {
                  if (ns4) {
                    document.layers[i].visibility="show";
                    // alert("i(ns): " + i);
                  }
                  if (ie4) {
                    document.all[i].style.visibility="visible";
                    // alert("i(ie): " + i);
                  }
                }
              }
            //-->
            </script>

          <style media="screen" type="text/css">
            <!--
              #ebene1  { position: absolute; top: 100px; left: 100px; width: 40px; height: 40px; }
              #ebene2  { position: absolute; top: 100px; left: 150px; width: 40px; height: 40px; }
              #ebene3  { position: absolute; top: 100px; left: 200px; width: 40px; height: 40px; }
              #ebene4  { position: absolute; top: 100px; left: 250px; width: 40px; height: 40px; }
              #ebene5  { position: absolute; top: 100px; left: 300px; width: 40px; height: 40px; }
              #ebene6  { position: absolute; top: 100px; left: 350px; width: 40px; height: 40px; }
            -->
            </style>
          </head>

          <body>
            <div id="ebene1">menü 1</div>
            <div id="ebene2">menü 2</div>
            <div id="ebene3">menü 3</div>
            <div id="ebene4">menü 4</div>
            <div id="ebene5">menü 5</div>
            <div id="ebene6">menü 6</div>
            <p><a href="javascript:hide()">alle weg</a></p>
            <p><a href="javascript:show()">alle her</a></p>
          </body>
          </html>

          danke und gruß
          matthias

          1. Hi,

            im IE hab' ich noch das problem, dass er mir auch die aufrufenden "alle weg" und alle her" ausblendet.

            analysiere mal (durch die alerts) den genauen Zeitpunkt, wann die aufrufenden Layer ausgeblendet werden.

            Cheatah

  3. Hallo Matthias,

    bin js-anfänger, hab' mich hier und im im self-html umgesehen, aber keinen passenden tipp gefunden

    eigentlich verdienst du für deine Tonart keine Antwort. So geht es nun wirklich nicht.

    » wenn ich aber nun mit einer For...Next - schleife das [x] "laufen" lasse,

    for (i=0;i<=5;i++) {
      document.layers[i].visibility="hide";
      ... bzw. ...
      document.all[i].style.visibility="hidden";
    }

    For...Next - schleife, deren aufbau ist mir klar. ich denke, es stimmt der zugriff auf die ojekthierarchie nicht.

    Richtig, der stimmt überhaupt nicht. Ich vermute eine ganze Reihe von Fehlerquellen.

    Frage 1: Was zeigt Netscape an, wenn du in die Adresszeile javascript: eingibst?
    Ich vermute mal layer ist kein Objekt oder ähnliches

    Frage 2: Verwendest du Layer oder Divs?

    Frage 3: Sind die Divs absolut positioniert?

    Frage 4: Besitzen sie eine eindeutige ID über die du sie ansprechen kannst.

    Frage 5: Hast du dir die Werte der Schleife ausgeben lassen?

    Garantiert nicht, dann wäre dir im IE einiges aufgefallen.

    Teste dieses Script:

    <html>
    <head>
    <title>
    </title>
    </head>
    <body>
    <b></b>
    <script type="text/javascript">
    <!--
    for (i=0;i<=5;i++)
       alert(document.all[i].tagName)
    //-->
    </script>

    </body>
    </html>

    Viele Grüße

    Antje

    1. hallo,

      eigentlich verdienst du für deine Tonart keine Antwort. So geht es nun wirklich nicht.

      wieso? was geht nicht? dass ich das sage, was ich denke?

      über den anderen regt sich komischerweise niemand auf... *grübel*

      trotzdem danke :-)

      gruß
      matthias

      1. Hi Matthias,

        sag mal, hast Du trotz lauter unsinnigerweise auf Leute einprügeln, die versuchen Dir zu helfen, zwischendurch mal Gelegenheit gehabt, Antjes Tipps zu probieren? Nein? Schade, denn dann hättste die Fehler längst gefunden.

        So, und jetzt bitte vor dem nächsten Posting Deinerseits erst mal Antjes Debug-Anweisungen folgen.

        Grüße,

        Utz