Toni: browser, nach submit an der selben scrollposition?

Hallo,

ich bin schon seit längerem auf der suche.
Mein Problem ist, das textmarker, mein formularfeld immer ganz oben im browser öffnet. das finde ich iritierend. daher suche ich eine möglichkeit, das der browser an der selben stelle bleib, wie vor dem klick auf einen button. leider kenne ich mich nicht sogut mit js aus, daher möchte ich euch bitten mir zu helfen.

MfG Toni

  1. Hallo Toni,

    Mein Problem ist, das textmarker, mein formularfeld immer ganz oben im browser öffnet. das finde ich iritierend. daher suche ich eine möglichkeit, das der browser an der selben stelle bleib, wie vor dem klick auf einen button. leider kenne ich mich nicht sogut mit js aus, daher möchte ich euch bitten mir zu helfen.

    Aus Deiner Beschreibung werde ich jetzt nicht so 100%ig schlau. Aber ich interpretiere das mal so:

    Du hast irgendein Formular. Dieses wird abgeschickt. Nach dem Abschicken taucht das gleiche Formular nochmal auf - nur diesmal natürlicherweise nach oben gescrollt. Das willst Du ändern.

    Du kannst mittels document.body.scrollTop (Internet Explorer) und windows.pageYOffset (alle anderen Browser) die Position im aktuellen Fenster auslesen:

    var position;
    if (window.pageYOffset) { // alle Browser außer IE
      position = window.pageYOffset;
    } else if (document.body.scrollTop) { // IE
      position = document.body.scrollTop;
    } else {
      // abbruch, browser kennt diese eigenschaften nicht
    }

    Siehe: http://de.selfhtml.org/javascript/objekte/window.htm#page_y_offset Du kannst nun ein verstecktes Formularfeld im HTMLCode anlegen:

    <input type="hidden" name="scrollposition" value="">

    Das wird erstmal leer gelassen und in Dein Formular gesetzt. Das kannst Du dann in Deiner Funktion mit der Scrollposition versorgen:

    document.forms['namedesformulars'].elements['scrollposition'] = position;

    Alles in allem hast Du dann eine Funktion:

    function setze_scrollposition () {
      var position;
      if (window.pageYOffset) { // alle Browser außer IE
        position = window.pageYOffset;
      } else if (document.body.scrollTop) { // IE
        position = document.body.scrollTop;
      } else {
        return;
      }
      document.forms['namedesformulars'].elements['scrollposition'] = position;
      return;
    }

    Die kannst Du im onsubmit()-Handler deines Forms aufrufen:

    <form ... name="namedesformulars" onsubmit="setze_scrollposition(); return true;">

    Nun musst Du nur noch dafür sorgen, dass sobald die neue Seite erzeugt wird, im onload-Handler des <body>-Tags die Scrollposition geändert wird:

    <body onload="window.scrollTo (0, ...);">

    wobei das ... hier von Deiner serverseitigen Technik durch den vorigen Wert 'scrollposition', den Du über das Formular bekommst, ersetzt wird.

    Viele Grüße,
    Christian

    1. Hi,

      Du hast irgendein Formular. Dieses wird abgeschickt. Nach dem Abschicken taucht das gleiche Formular nochmal auf - nur diesmal natürlicherweise nach oben gescrollt. Das willst Du ändern.

      Wenn das das gewünschte wäre (ungetestet):
      Form mit Methode Post (damit keine URL-Parameter stören), und mit id versehen.
      Die Action bekommt die id als Fragment identifier angehängt.
      Gibt dann zwar nicht 100% die Scrollposition, aber zumindest ist das Formular wieder sichtbar.
      Der Ankerpunkt kann natürlich auch ein Stück weiter oben gesetzt werden, der muß nicht in die form.

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.