Sören: verlinkung mit window.location.search

hallo!

nun da ich jetzt meinen layerwechsel hinbekommen habe (danke gunnar! es lag auch u.a. daran dass ich i nicht von 1 sondern von 0 loslaufen liess!) möchte ich von ausserhalb direkt auf die divs verlinken. das möchte ich mit einer switch-bedingung lösen:

switch(window.location.search != "") {
 case "?f1":
 document.getElementById(f1).style.visibility = "visible";
 break;
 case "?f2":
 document.getElementById(f2).style.visibility = "visible";
 break;
.
.
.
 }

location.search fand ich angebracht da ich gelesen habe dass man damit sogar formulare vorschreiben kann. die links verweisen dann bei mir mit href="tunnelinggal.htm?f1" zB
f1-f7 sind hierbei die ids der einzelnen layer. scheinbar hab ich wieder mannigfaltig viele fehler begangen da nicht mal ein wohl platzierter alert beim aufrufen der verlinkung auftaucht. ich wäre sehr dankbar für ein paar verbesserungsvorschläge hierzu.

Sören

  1. Hallo,

    nun da ich jetzt meinen layerwechsel hinbekommen habe (danke gunnar! es lag auch u.a. daran dass ich i nicht von 1 sondern von 0 loslaufen liess!) möchte ich von ausserhalb direkt auf die divs verlinken. das möchte ich mit einer switch-bedingung lösen:

    switch(window.location.search != "") {
     case "?f1":
     document.getElementById(f1).style.visibility = "visible";
     break;
     case "?f2":
     document.getElementById(f2).style.visibility = "visible";
     break;

    Wenn location.search gefüllt ist, ergibt (window.location.search != "") true, also ist es dasselbe, als wenn du switch (true) ... notieren würdest. Beim ersten case vergleicht er also true == "?f1". Da gefüllte Strings bei der Umwandlung in Boolean immer true ergeben, steigt er bei case "?f1": in jedem Fall ein und macht f1 sichtbar, egal, was in location.search steht.

    Du müsstest also switch(window.location.search) ... schreiben und die Abfrage, ob location.search überhaupt gefüllt ist, davorschalten (bzw. sie wäre höchstens nötig, wenn du im else-Fall Anweisungen ausführen willst).

    Mathias

    1. hi,

      Du müsstest also switch(window.location.search) ... schreiben und die Abfrage, ob location.search überhaupt gefüllt ist, davorschalten (bzw. sie wäre höchstens nötig, wenn du im else-Fall Anweisungen ausführen willst).

      den nicht-gefüllt-fall könnte man ggf. auch, wenn alle gefüllt-fälle ihre eigenen cases haben, per default abhandeln.

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      1. hallo,

        die switch-bedingung scheint nun wunderbar zu funktionieren zumindest gibt er mir das alert an folgender stelle wunderbar aus:

        switch(window.location.search) {
         case "?f7":
         alert(window.location.search);
         document.getElementById(f7).style.visibility = "visible";
         break;

        }

        der layer erscheint trotzdem nicht. liegt es an der css anweisung im head (visibility: hidden) oder ist die art wie ich den layer im javascript anspreche falsch? die id stimmt ja soweit mit der im body überein.

        Sören

        1. hi,

          document.getElementById(f7).style.visibility = "visible";

          welchen wert hast du der javascript-variablen f7 zugewiesen, bevor du sie hier ansprichst?

          gruß,
          wahsaga

          --
          "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
          1. hi,

            ich habe f7 eigentlich keinen wert gegeben. es ist nur die id des siebten layers. und den layern habe ich folgende style-anweisungen gegeben:

            .original {position:absolute; top:80px; width:510px; height:440px; visibility:hidden;}
            aber daran kanns ja auch nicht liegen.

            Sören

            1. hi,

              ich habe f7 eigentlich keinen wert gegeben. es ist nur die id des siebten layers.

              nein, so wie du es derzeit verwendest, ist es der zugriff auf eine javascript-variable mit dem namen f7.

              wenn du stattdessen den textstring "f7" übergeben möchtest - nun ja, schon anhand der von mir gewählten schreibweise sollte erkenntlich sein, was du dann zu tun hättest.

              gruß,
              wahsaga

              --
              "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. Hallo Sören,

    switch(window.location.search != "") {
    case "?f1":
    document.getElementById(f1).style.visibility = "visible";
    break;
    case "?f2":
    document.getElementById(f2).style.visibility = "visible";
    break;
    .
    .
    .
    }

    Und warum so kompliziert?

    var MyId = window.location.search;
    if (MyId) {
      MyId = MyId.substring(1,MyId.length);
      document.getElementById(MyId).style.visibility = "visible";
    }

    Das sollte funktionieren.

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. hallo detlef,

      var MyId = window.location.search;
      if (MyId) {
        MyId = MyId.substring(1,MyId.length);
        document.getElementById(MyId).style.visibility = "visible";
      }

      so ähnlich hatte ich mir das am anfang auch gedacht. ich habe dann aber mal mir window.location.search mit alert ausgeben lassen und es wird tatsächlich das fragezeichen mitgesendet. deswegen habe ich auf switch gesetzt um die einzelnen layer ansprechen zu können. leider keine wirkung bisher.

      Sören

      1. Hallo Sören

        ... ich habe dann aber mal mir window.location.search mit alert ausgeben lassen und es wird tatsächlich das fragezeichen mitgesendet.

        Natürlich.
        Was meinst du, was "MyId = MyId.substring(1,MyId.length);" macht?
        Lies mal
        http://de.selfhtml.org/javascript/objekte/string.htm#substring und
        http://de.selfhtml.org/javascript/objekte/string.htm#length.

        ... deswegen habe ich auf switch gesetzt um die einzelnen layer ansprechen zu können. leider keine wirkung bisher.

        Weil ein Zeichen zuviel ist, treibst du so einen Aufwand?

        Auf Wiederlesen
        Detlef

        --
        - Wissen ist gut
        - Können ist besser
        - aber das Beste und Interessanteste ist der Weg dahin!
        1. ok danke ich seh jetzt bei deinem script durch! leider erscheint immer noch kein layer. ich habe die html mal eben hochgeladen vielleicht findet einer von euch den fehler:

          http://www.mynos.de/finish2/tunneling.htm

          einfach auf einen der blaumarkierten links klicken dann sollte es zur galerie gehen.

          Sören

          1. Hallo Sören

            ...  leider erscheint immer noch kein layer. ich habe die html mal eben hochgeladen vielleicht findet einer von euch den fehler:

            http://www.mynos.de/finish2/tunneling.htm

            Ich habe nur einmal kurz nachgesehen.
            Jetzt überlege bitteeinmal:
            Wann wird des Script ausgeführt?
            Wann werden die (versteckten) Divs gezeichnet?
            Gibt es diese überhaupt schon, wenn das Scrip ausgeführt wird?

            Tipp:
            http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onload

            Auf Wiederlesen
            Detlef

            --
            - Wissen ist gut
            - Können ist besser
            - aber das Beste und Interessanteste ist der Weg dahin!