URL link zu einem Accordion Reiter

  • Hi


    Kann mir jemand bei diesem Problem helfen?

    Ich bin ein absoluter Neuling, wenn es darum geht, Java script Code zu schreiben und lern es erst gerade, habt also noch etwas nachsicht mit mir.


    Ausgangssituation:

    Ich habe auf meiner Hauptwebseite ( index.html) ein Akkordeon mit 3 Registerkarten.

    In meiner Webseiten-Kopfzeile ist ein Navigationsmenü, das auf die verschiedenen Akkordeon-Index-Taps verweist.

    Dazu hatte ich den div-container des jeweiligen card body eine ID vergeben und als hash für den URL-Links verwendet.

    In meinem Fall:

    ./index.html#accordion-14913-item-2

    ./index.html#accordion-14913-item-3

    ./index.html#accordion-14913-item-4


    und dem Page footer den Skriptcode eingefügt:


    <script>

    if (location.hash !== null && location.hash !== "") {

    $(location.hash + ".collapse").collapse("show");


    }

    </script>


    Es funktioniert, wenn:

    - Ich den Link von einer meiner anderen Seite aus klicke.

    - Ich den link von der Seite mit dem Accordion in einem neuen Browser Tap öffnen lasse oder

    - Ich den link von der Seite mit dem Accordion klicke und danach den reload im Browser manuell auslöse.


    Problem:

    Wie erreiche ich es, dass es auch funktioniert, wenn der Link auf der Webseite geklickt wird, auf der sich das Accordion befindet,

    ohne den reload manuell auslösen zu müssen?

  • Ich nehme mal an, deine Links sehen so aus:

    <a href="./index.html#accordion-14913-item-2">Der Linktext</a>

    Dann sollte es so funktionieren:

    Code
    $('a[href*="#accordion"]').on('click', event =>
        const hash = event.target.href.split('#')[1];
        const $('#' + hash + ".collapse").collapse("show");
    });

    aber ungetestet

  • @Sempervivum Danke für deine schnelle Antwort. Ich hab deinen Script code getestet, aber in meinem Fall funktioniert er nicht. Weder wenn ich den link von einer meiner anderen Seiten aufrufe noch von der Seite mit dem Accordion. Trotzdem vielen Dank für deinen Einsatz.


    mein Link sieht folgendermassen aus:


    Code
    <li class="nav-item">
                                    <a href="./index.html#accordion-14913-item-2" class="nav-link a-btn">Director</a>
                                </li>
  • Als ich die Endung sah, dachte ich zunächst OMG, aber es war dann glücklicher Weise nur Text drin. Wie ich sehe ist das Bootstrap. Ich habe mal die Dateien von Bootstrap 4 eingebunden und damit funktioniert es.

    Mein Javascript war auch gar nicht so verkehrt, jedoch fehlte eine öffnende Klammer und das event.preventDefault(). Ohne letzteres wird die Seite neu geladen und das Akkordeon ist gleich wieder zu.

    Dieses funktioniert auf meiner Testseite:

    Code
            $('a[href*="#accordion"]').on('click', event => { // <--- öffnende Klammer fehlte
                event.preventDefault(); // <--- dieses fehlte
                const hash = event.target.href.split('#')[1];
                $('#' + hash + ".collapse").collapse("show");
            });
  • Ich hätte es gleich vollständig posten sollen:

    1. Da fehlen die script-Tags.

    2. Das bisherige Javascript muss erhalten bleiben.

    3. Das preventDefault muss drin sein, sonst wird die Seite neu geladen.

    So sollte es funktionieren:

  • Mein Fehler, Entschuldigung.


    Es funktioniert. Ich habs nochmals hochgeladen. Erst mal 1000 Dank für den Einsatz und all die Hilfe.


    Das einzige was es nicht macht ist zu dem Punkt des Accordions steuern/scrollen, wenn ich schon auf der Seite des accordion bin.


    Danke nochmals

  • Versuche dies:

    Man könnte noch ein geschmeidiges Scrollen erzielen durch eine Animation.

  • "ganz gut" trifft es: Leider nicht ganz perfekt, weil das Element zwar sichtbar wird, aber nicht vollständig. Das liegt daran, dass das Aufklappen animiert ist und das Scrolling statt findet, wenn es noch zu ist. Dazu fällt mir auf Anhieb keine Lösung ein, nur eine unschöne, indem man die Seite nach unten hin verlängert.

  • Gibt es eine Möglichkeit das scrollen um 1 sec zu verzögern? Ich hatte dazu mal eine Funktion gesehen, dachte ich zumindestens.


    Aber ich bin schon sehr glücklich, das es so klappt. Danke

  • Ja, das Verzögern geht selbstverständlich, ich habe es mal in Verbindung mit der Animation gemacht:

  • Ich habs mal auf eine halbe sec (500) verkürzt, das fühlt sich natürlicher an und hochgeladen.

    Funktioniert sauber, wenn beim auslösen alle Accordion Taps geschlossen sind. Ich glaub,

    wenn man das noch vor das öffnen des entsprechenden Reiter setzt, müsste es passen.


    Nochmals vielen Dank, dass Du deinen kompletten Sonntag dafür opferst.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!