jonny: Position des Skrollbalken nach Aktualisierung

Hallo,

seit einiger Zeit stört mich ungemein ein kleines Problem und ich finde keine Lösung hierzu. Hier bei selfhtml und bei vielen anderen Internetseiten ist mir das Probelem nicht aufgefallen.

Schilderung:
Wenn ich hier im Forum einige Seiten heruntergeskrollt habe und nach wenigen Minuten die Seite aktualisiere, um zu schauen, ob eine neue Nachricht angekommen ist, dann wandert der Skrollbalken nicht wieder ganz nach oben, sondern zurück an die Position, an der er zuvor stand. Genau das möchte ich auch bei meiner Seite erreichen.

Meine Seite:
Der Seitensteal meiner Seite ist mit dem Windows-Explorer vergleichbar. Die Hauptseite ist in zwei Frames aufgeteilt. Der linke Frame (30%) enthält auch tatsächlich eine Baumstruktur zur Auswahl von Daten, die man gerne sehen möchte. Klick man einen Verweis an, erscheinen die Daten im rechten Frame (70%). Damit man allerdings an die gewünschten Verweise herankommt, muss man wie im Explorer Plus zeichen anklicken, die sich danach in Minuszeichen verwandeln und darunter eine Liste möglicher Verweise anzeigt. Das Plus bzw. Minuszeichen ist ein Link zum gleichen Skript, nur das ich dem Skript immer wieder die Parameter open oder close der gewünschten Sicht mitgebe. Nun, die Liste ist manchmal sehr lang und dann passiert es, dass wenn ich eine neue Liste ganz am Ende der Seite öffne, der Skrollbalken wieder nach oben wandert. Daraufhin muss man wieder bis ans Ende Skrollen, um den gewünschten Link anklicken zu können.

ein winziges Beispiel:

  • Server1
  • Server2
  • Server3
  • Server4
      CPU Last
      Speicherauslastung
      Netzwerk I/O
      Device I/O
      etc...
  • Server5
  • Server6
  • Server7
      CPU Last
      Speicherauslastung
      Netzwerk I/O
      Device I/O
      etc...
  • Server8
  • Server9
    etc...

Wenn ich nun auf das Plus von Server9 klicke, werden folgende Parameter an ein Perl Skript geschickt:

server.fcgi?open=Server4,Server7,Server9

Bei nochmaligem Klick auf Server9, also diesmal einem Minuszeichen, passiert folgendes:

server.fcgi?open=Server4,Server7

Also hier ohne Server9, so wie es vorher war.

Wie schaffe ich es nun, dass der Skrollbalken dort stehen bleibt, wo er zuvor stand.

Mfg,
Jonny

  1. Wie schaffe ich es nun, dass der Skrollbalken dort stehen bleibt, wo er zuvor stand.

    Beim Aktualisieren belibt der Scrollbalken wo er war, bzw. (zumindest) der IE versucht wieder an die gleiche Textstelle zu springen.
    So wie du es schreibst aktualisierst du nicht, sonder klickst Links an. Dann must du den Text selbst verankern

    1. Hallo,

      Beim Aktualisieren belibt der Scrollbalken wo er war, bzw. (zumindest) der IE versucht wieder an die gleiche Textstelle zu springen.

      nun bei mir im Test sind Opera und IE und beide Skrollbalken springen wieder ganz nach oben. Mit beiden besuchen habe ich auch selfhtml und google getestet, bei denen der Skrollbalken zurück an die Position springt, an der er zuvor stand.

      Ich werde deinem Tipp sofort nachgehen.

      Mal schauen...

      Mfg,
      Jonny

    2. Hallo dedlfix,

      sorry, aber das mit dem Anker habe ich nicht so ganz verstanden.

      Nun, eine Zeile mit Link etc. schaut so bei mir aus:

      <td style="width:8%;text-align:left;"><a href="server.fcgi?Dt=2005-01-24&Glb=close&Ho=close&Lx=open&Dbs=close&Srv=rhprlx03,lxzse003,lxzpr001,0&Sid=0&Hst=0&Up=0" target="server"><img src="/pic/splus.gif" width="11" height="11" border="0"></a></td>

      Wie müsste ich das jetzt umschreiben, dass es funktioniert?

      Etwa so:

      <a name="server.fcgi?Dt=2005-01-24&Glb=close&Ho=close&Lx=open&Dbs=close&Srv=rhprlx03,lxzse003,lxzpr001,0&Sid=0&Hst=0&Up=0"></a>

      und dann der Aufruf:

      <td style="width:8%;text-align:left;"><a href="server.fcgi" target="server"><img src="/pic/splus.gif" width="11" height="11" border="0"></a></td>

      Mfg,
      Jonny

      1. sorry, aber das mit dem Anker habe ich nicht so ganz verstanden.

        Nun, eine Zeile mit Link etc. schaut so bei mir aus:

        <td style="width:8%;text-align:left;"><a href="server.fcgi?Dt=2005-01-24&Glb=close&Ho=close&Lx=open&Dbs=close&Srv=rhprlx03,lxzse003,lxzpr001,0&Sid=0&Hst=0&Up=0" target="server"><img src="/pic/splus.gif" width="11" height="11" border="0"></a></td>

        Wie müsste ich das jetzt umschreiben, dass es funktioniert?

        Du musst einen Anker einfügen und deinen Link um die Anker-Referenz ergänzen. So in etwa:
        <td...><a name="ankername"></a><a href="server...Up=0#ankername>...

        Vielleicht war mein Ansinnen, den Unterschied zwischen Aktualisieren und Link klicken zu verdeutlichen, vorhin etwas undeutlich bei dir angekommen: Mit "Aktualisieren" ist eine Fuktion des Browsers gemeint, die gleiche Seite noch mal anzufordern, beim IE auch mit Taste F5 erreichbar. Das hat mit der von dir beschriebenen Problematik nichts weiter gemeinsam, denn beim Klicken auf einen Link wird irgendwas neues angefordert. Das kann zwar zufällig die selbe Seite sein, das sieht der Browser aber nicht so. Deswegen musst du ihm die Hilfestellung mit dem Anker geben.

        1. Hiho,

          super, bis hier hin klappt es!

          Jetzt muss ich nur noch testen, ob ich eine Variable als Anker nutzen kann, denn die Größe der Liste wird ja generiert und kann sich ständig ändern. Ich versuche mal einen counter zu nehmen, eventuell sowas wie

          $a=0
          print "<a name="$a"></a><a href="server.fcgi?param1#$a>link</a>\n";

          $a++;
          print "<a name="$a"></a><a href="server.fcgi?param2#$a>link</a>\n";

          $a++;
          print "<a name="$a"></a><a href="server.fcgi?param3#$a>link</a>\n";

          Mal schauen ob das klappt.

          Danke für die Hilfe.

          Mfg,
          Jonny

          1. sorry, schreibfehler entdeckt...

            $a=0
            print "<a name="$a"></a><a href="server.fcgi?param1#$a>link</a>\n";

            $a++;
            print "<a name="$a"></a><a href="server.fcgi?param2#$a>link</a>\n";

            $a++;
            print "<a name="$a"></a><a href="server.fcgi?param3#$a>link</a>\n";

            so ist's korrekt:

            print "<a name="$a"></a><a href="server.fcgi?param3#$a">link</a>\n";

            Mfg,
            Jonny

        2. Hi,

          Du musst einen Anker einfügen

          nö. Es reicht der ohnehin vorhandene, der braucht nur noch ein name-Attribut.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo Andreas,

            Du musst einen Anker einfügen

            nö. Es reicht der ohnehin vorhandene, der braucht nur noch ein name-Attribut.

            wie meinst du das? Es ist schon einer vorhanden, ich muss nur #anker dranhängen?

            Mfg,
            Jonny

            1. Tag jonny.

              Du musst einen Anker einfügen
              nö. Es reicht der ohnehin vorhandene, der braucht nur noch ein name-Attribut.
              wie meinst du das? Es ist schon einer vorhanden, ich muss nur #anker dranhängen?

              Du schreibst (Formatierungen und Script-Parameter habe ich wegen der Lesbarkeit mal rausgeschmissen):

              <td>
                <a href="server.fcgi" target="server">
                  <img src="/pic/splus.gif" width="11" height="11" border="0">
                </a>
              </td>

              Das a-Element hat aber noch mehr Attribute, u.a. auch ein name-Attribut. Wenn du dieses angibst und mit einem gültigen Wert versiehst, kannst du den Link als Anker verwenden:

              <td>
                <a name="ankername" href="server.fcgi" target="server">
                  <img src="/pic/splus.gif" width="11" height="11" border="0">
                </a>
              </td>

              Den Ankernamen musst du nur an das Script weitergeben, wie dir dedlfix schon geschrieben hat.

              Siechfred

              --
              »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«