Browser scrollt nicht zu Anker nach Neuladen einer PHP-Ausgabe

  • HTML

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von milaim.

    Browser scrollt nicht zu Anker nach Neuladen einer PHP-Ausgabe

    Ich habe eine dynamisch (per PHP) generierte Seite. Diese Seite enthält mehrere Buttons zur Navigation (z. B. Vor/Zurück).

    Konkret wird bei einem der Buttons das hier aufgerufen:
    http://master/wbblite/meli_eingabe_medien.php?sid=&eingabeid=1&page=3&action=next#navi

    Entscheidend ist nun das "#navi" am Ende. Es gibt im HTML-Dokument ein Element mit der ID "navi". Dahin soll der Browser scrollen, nachdem die Seite durch den Navigationsbutton neu geladen wurde.

    Das ist aber leider nicht der Fall.

    Entferne ich die Ankerangabe aus der URL, so wird gar nicht gescrollt, die Seite ist nach dem Reload ganz oben. Soweit logisch. Gebe ich den Anker an, scrollt er ein bisschen, aber viel zu wenig. Er soll in meinem Fall ganz nach unten scrollen. Witzigerweise scrollt er aber korrekt, wenn ich danach in der Adresszeile des Browsers (Firefox 22.0) einfach Enter drücke.

    Offensichtlich ist es so, dass er die Seite dann nicht neu lädt (weil er erkennt, dass die aufgerufene Seite exakt die selbe URL hat wie die neu angeforderte Seite). Ändere ich aber einen Parameter in der Adresszeile, so klappt das Scrollen wieder nicht (weil er dann die Seite neu lädt).

    Woran liegt das? Warum scrollt der Browser nach dem Neuladen der PHP-Ausgabe nicht an die gewünschte Stelle?

    Ich gehe davon aus, dass es irrelevant ist, ob es sich um eine PHP-Ausgabe oder um eine statische HTML-Seite handelt.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi Markus,
    das sollte theoretisch so funktionieren, wie du es dir vorstellst.

    Ich verstehe das so (Datei: bla.php):

    PHP-Quellcode

    1. <html>
    2. <head>
    3. <title></title>
    4. </head>
    5. <body>
    6. <a href="bla.php?var1=<?php echo rand(1, 1000); ?>&var2=2&var3=testing#test">gehe zu test</a>
    7. <div>
    8. blindtext<br />
    9. blindtext<br />
    10. blindtext<br />
    11. blindtext<br />
    12. blindtext<br />
    13. blindtext<br />
    14. blindtext<br />
    15. blindtext<br />
    16. blindtext<br />
    17. blindtext<br />
    18. blindtext<br />
    19. blindtext<br />
    20. blindtext<br />
    21. blindtext<br />
    22. blindtext<br />
    23. blindtext<br />
    24. blindtext<br />
    25. blindtext<br />
    26. blindtext<br />
    27. blindtext<br />
    28. blindtext<br />
    29. blindtext<br />
    30. blindtext<br />
    31. blindtext<br />
    32. blindtext<br />
    33. blindtext<br />
    34. blindtext<br />
    35. blindtext<br />
    36. blindtext<br />
    37. blindtext<br />
    38. blindtext<br />
    39. blindtext<br />
    40. blindtext<br />
    41. blindtext<br />
    42. blindtext<br />
    43. blindtext<br />
    44. blindtext<br />
    45. blindtext<br />
    46. blindtext<br />
    47. blindtext<br />
    48. blindtext<br />
    49. blindtext<br />
    50. blindtext<br />
    51. blindtext<br />
    52. blindtext<br />
    53. blindtext<br />
    54. blindtext<br />
    55. blindtext<br />
    56. blindtext<br />
    57. blindtext<br />
    58. blindtext<br />
    59. blindtext<br />
    60. blindtext<br />
    61. blindtext<br />
    62. </div>
    63. <div id="test">
    64. <h1>test</h1>
    65. <?php
    66. echo "var1=".$_REQUEST["var1"]."</br>";
    67. echo "var2=".$_REQUEST["var2"]."</br>";
    68. echo "var3=".$_REQUEST["var3"]."</br>";
    69. ?>
    70. blindtext<br />
    71. blindtext<br />
    72. blindtext<br />
    73. blindtext<br />
    74. blindtext<br />
    75. blindtext<br />
    76. blindtext<br />
    77. blindtext<br />
    78. blindtext<br />
    79. blindtext<br />
    80. blindtext<br />
    81. blindtext<br />
    82. blindtext<br />
    83. blindtext<br />
    84. blindtext<br />
    85. blindtext<br />
    86. blindtext<br />
    87. blindtext<br />
    88. blindtext<br />
    89. blindtext<br />
    90. blindtext<br />
    91. blindtext<br />
    92. blindtext<br />
    93. blindtext<br />
    94. blindtext<br />
    95. blindtext<br />
    96. blindtext<br />
    97. blindtext<br />
    98. blindtext<br />
    99. blindtext<br />
    100. blindtext<br />
    101. blindtext<br />
    102. blindtext<br />
    103. blindtext<br />
    104. blindtext<br />
    105. blindtext<br />
    106. </div>
    107. </body>
    108. </html>


    Das funktioniert nämlich so wie es sein sollte (Die Seite wird auch neu geladen und die Variable1 hat ein Random-Wert). Eventuell ist irgendwo ein Formatierungsfehler in der Ausgabe drin und deswegen bleibt's stehen.

    LG
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Du hast mich auf jeden Fall richtig verstanden. Dein Beispiel entspricht genau meinem Fall. Das Beispiel funktioniert einwandfrei, meine Datei aber nicht.

    Interessanterweise besteht das Problem bei mir aber nicht, wenn ich das Fenster maximiert habe (wobei er da auch nicht zu 100% akurat scrollt, aber fast). Aber sobald es nicht mehr maximiert ist, auch wenn es auf volle Bildschirmgröße skaliert wurde, kommt der Fehler.

    Ich glaube nicht, dass es an irgendwelchen Formatierungen liegt, denn wenn ich in der Browserzeile Enter drücke, klappt es ja (sofern die Seite nicht neu geladen wird).

    Vielleicht liegt es daran, dass die Seite relativ lange lädt? Also das PHP-Skript braucht deutlich länger als dein Skript, weil ich viele Datenbankzugriffe habe. Wobei ein sleep(2) in deinem Skript auch keine Änderung bringt, funktioniert immer noch einwandfrei.

    EDIT: Wenn ich Javascript im Firefox deaktiviere, so klappt es! Das ist natürlich keine Option, aber seltsam ist es. Wenn ich alle Javascripts aus der Seite entferne, so tritt der Fehler (mit aktiviertem Javascript im Browser) aber trotzdem auf.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Kannst du einen Dummy bauen und es uns/mir zum testen zur Verfügung stellen? Ich würd' mir das gern mal ansehen...

    Ansonsten könntest du probieren, ob das hiermit klappt:

    <a href="bla.php#navi">gehe zu navi</a>

    <a name="navi" href="#">&nbsp;</a>
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Ich habe den Fehler gefunden!

    Ich hatte doch noch ein Javascript im Dokument, welches ich erst übersehen habe.

    Und zwar:

    HTML-Quellcode

    1. <body id="bg" onLoad="document.forms[0].elements[0].focus();">

    Das hat zwar komischerweise nicht dafür gesorgt, dass der Browser immer beim 1. Eingabefeld war (von der Scrollposition her), hat aber das korrekte Scrollen verhindert. Ich habe die Anweisung rausgenommen bzw. modifiziert und nun geht es.

    Danke!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum