1
Anfängerfragen / Antw:FW_okDialog() springt immer zum Anfang der Seite
« Letzter Beitrag von mumpitzstuff am Heute um 21:31:34 »Ich habe des Rätsels Lösung gefunden! href sollte nicht # enthalten, sondern etwas das garantiert nicht als Anchor auf der Webseite vorhanden ist, also z.B. #! oder #qgdbhdsduzadtgufafhqwjAOHSDHF. In diesem Fall wird kein Pagereload gemacht und damit geht die aktuelle Scrollposition auch nicht verloren. Das Problem scheint es übrigens nur zu geben, wenn man FW_okDialog aus einem a Tag heraus aufruft. Das sichern der Scrollposition und zurücksetzen der Scrollpostion ist in diesem Fall sinnlos, da oldPos immer 0 ist, wahrscheinlich weil bereits gescrollt wurde, bevor onclick überhaupt ausgeführt wird.
Das Ganze sieht dann so aus:
Davon abgesehen sollte die Funktion FW_okDialog() vielleicht wie folgt geändert werden, da ich nicht glaube, das die Lösung mit dem Timeout sauber ist:
Das Ganze sieht dann so aus:
Code: [Auswählen]
<a href=\"#!\" onclick=\"FW_okDialog('".$stitle."<br><br>".$desc."')\">".$title."</a>
Davon abgesehen sollte die Funktion FW_okDialog() vielleicht wie folgt geändert werden, da ich nicht glaube, das die Lösung mit dem Timeout sauber ist:
Code: [Auswählen]
function
FW_okDialog(txt, parent, removeFn)
{
var div = $("<div id='FW_okDialog'>");
$(div).html(txt);
$("body").append(div);
var oldPos = $("body").scrollTop();
$(div).dialog({
dialogClass:"no-close", modal:true, width:"auto", closeOnEscape:true,
maxWidth:$(window).width()*0.9, maxHeight:$(window).height()*0.9,
buttons: [{text:oldPos, click:function(){
$(this).dialog("close");
if(removeFn)
removeFn();
$(div).remove();
}}],
// das müsste das Gleiche wie das Timeout unten machen...
open:function(event, ui){
$("body").scrollTop(oldPos);
}
});
FW_replaceWidgets(div);
$(div).find("a").each(function(){FW_replaceLink(this);}); //Forum #33766
if(parent)
$(div).dialog( "option", "position", {
my: "left top", at: "right bottom",
of: parent, collision: "flipfit"
});
// die Funktion ist vielleicht im Event open besser aufgehoben...
//setTimeout(function(){$("body").scrollTop(oldPos);}, 1); // Not ideal.
}