Christian Seiler: browser, nach submit an der selben scrollposition?

Beitrag lesen

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