Servus,
folgendes Problem:
Seite A hat eine lange, lange Liste von Einträgen. Klickt man auf einen Eintrag, so öffnet sich ein Popup, in dem man diesen Eintrag modifizieren kann. Hat man diesen modifiziert klickt man auf 'SPEICHERN' und das Popup wird geschlossen und das darunterliegende Fenster wird aktualisiert.
Das Problem ist nun, dass die Seite A nun wieder ganz oben ist. Ich hätte allerdings gerne, dass diese Seite wieder an ihrer alten Stelle ist.
Habt ihr zufällig eine gute Idee, wie dieses AJAX frei zu realisieren ist. Ich will einen echten Reload und keine Nachladen mit XmlHttpRequest.
Einen Ansatz hätte ich:
Ich rufe im Mutterfenster eine eigene Funktion auf. Diese ermittelt die aktuelle Scrollposition und ruft dann per location.href sich selbst mit allen schon vorhandenen Parametern und der Scrollposition auf.
Beim neuladen überprüft man dann per 'onLoad' diesen Parameter und scrollt dann zur Stelle.
Ein akzeptabler Weg?
Reload mit Beibehaltung der Scrollposition
gepostet vor 18 Jahre, 7 Monate von TheUndeadable
gepostet vor 18 Jahre, 7 Monate von HSINC
oder du gibst jedem link einen anker der mit dem popup übergeben wird/zwischengespeichert wird und beim reload der mothersite wird diese mit dem anker aufgerufen
gepostet vor 18 Jahre, 7 Monate von TheUndeadable
Mmmh, suboptimal.
Dann ist der Browser nur ungefähr an der alten Position. Mir wäre es am liebsten, wenn die Position pixelgenau übereinstimmt.
Dann ist der Browser nur ungefähr an der alten Position. Mir wäre es am liebsten, wenn die Position pixelgenau übereinstimmt.
gepostet vor 18 Jahre, 7 Monate von HSINC
dann halt wirklich mit js die scrollposition bestimmen und nach dem reload hinscrollen
gepostet vor 18 Jahre, 7 Monate von TheUndeadable
// Reloads list window and restores the current scrollposition
function ReloadListWindow()
{
var aoScrollPosition = GetScrollPosition();
var nScrollY = aoScrollPosition [ "y" ];
var szCurrentUrl = document.URL;
// Strip scrollpositiony, if it exists
var nParaPos = -1;
if ( ( nParaPos = szCurrentUrl.indexOf ( "scrollpositiony" ) ) != -1 )
{
szCurrentUrl = szCurrentUrl.substring ( 0, nParaPos - 1 );
}
var szUrlAdd = "scrollpositiony=" + nScrollY;
if ( szCurrentUrl.indexOf ( '?' ) == -1 )
{
szCurrentUrl += "?" + szUrlAdd;
}
else
{
szCurrentUrl += "&" + szUrlAdd;
}
document.location.href = szCurrentUrl;
}
// This function has to be recalled, after the ReloadListWindow has been executed
// It sets the scrollposition by the GET-parameter scrollpositiony.
// It is important that this function will be called after all data has been sent
function ListWindowReloaded()
{
var szCurrentUrl = document.URL;
// Strip scrollpositiony, if it exists
var nParaPos = -1;
if ( ( nParaPos = szCurrentUrl.indexOf ( "scrollpositiony" ) ) != -1 )
{
var szScrollY = szCurrentUrl.substring ( nParaPos + 16 );
window.scrollTo ( 0, szScrollY );
}
}
// Gets currentscrollposition
function GetScrollPosition()
{
var docEl = (
typeof document.compatMode != "undefined" &&
document.compatMode != "BackCompat"
)? "documentElement" : "body";
var aoReturn = new Array();
if (window.pageXOffset)
{
aoReturn [ "x" ] = window.pageXOffset;
}
else
{
aoReturn [ "x" ] = document [docEl].scrollLeft;
}
if (window.pageYOffset)
{
aoReturn [ "y" ] = window.pageYOffset;
}
else
{
aoReturn [ "y" ] = document [docEl].scrollTop;
}
return aoReturn;
}
Klappt....
IE 6, Opera und FF 1.5.03
gepostet vor 18 Jahre, 7 Monate von knalli
Naja, HttpRequest muss ja nicht asynchron sein.. ich sage nur dritter Parameter.
Sofern ich das Problem verinnerlicht habe: Bleibt die Position nicht gleich, wenn man einen Anker auf hat?`Z.b. www.deine-tolle-seite.de/seite/index.htm#einetollemarke11
Sofern ich das Problem verinnerlicht habe: Bleibt die Position nicht gleich, wenn man einen Anker auf hat?`Z.b. www.deine-tolle-seite.de/seite/index.htm#einetollemarke11
gepostet vor 18 Jahre, 7 Monate von Kampfhoernchen
Ne, wenn man zurück geht, ist der Anker ganz oben. Wenn man in der Mitte der Seite hinklickt, verrutscht die Seite nach oben.
So hab ich das mit einem Iframe gelöst: Man klickt auf "Bearbeiten", worauf der Bearbeiten-Dialog direkt unter der Zeile auftaucht und man den Eintrag darin bearbeiten kann. Das Formular im IFrame wird abgeschickt, und das zurückgelieferte Dokument im Iframe ruft mit top.change_eintrag(params) eine Funktion auf, die die Daten des Eintrags schreibt und dann das Iframe wieder ausblendet.
Mit nem Popup sollte es genauso gehen.
So hab ich das mit einem Iframe gelöst: Man klickt auf "Bearbeiten", worauf der Bearbeiten-Dialog direkt unter der Zeile auftaucht und man den Eintrag darin bearbeiten kann. Das Formular im IFrame wird abgeschickt, und das zurückgelieferte Dokument im Iframe ruft mit top.change_eintrag(params) eine Funktion auf, die die Daten des Eintrags schreibt und dann das Iframe wieder ausblendet.
Mit nem Popup sollte es genauso gehen.