Wie kann ich verhindern, dass ein Klick auf einen „#“-Link zum Seitenanfang springt?

Lesezeit: 5 Minuten

Benutzeravatar von st4ck0v3rfl0w
st4ck0v3rfl0w

Ich verwende derzeit <a> Tags mit jQuery, um Dinge wie Klickereignisse usw. zu initiieren.

Ein Beispiel für das, was ich tue, ist: <a href="#" class="someclass">Text</a>.

Aber ich mag es nicht, wie das ‘#’ die Seite zum Anfang der Seite springen lässt. Was kann ich stattdessen tun?

  • Duplikat von stackoverflow.com/questions/720970/jquery-hyperlinks-href-value/…

    – Bogdan Constantinescu

    15. Juli 2010 um 6:59 Uhr

  • Ich bin hier mit David Dorward und Gargantaun in der verknüpften doppelten Frage. Wenn Sie Links auf Ihrer Website haben, müssen diese wie normale Links funktionieren. Wenn JavaScript sie abfängt und etwas anderes macht, schön und gut, aber Sie müssen dort einen echten Link haben, der zu einer echten Seite führt. Dies ist aus allen möglichen Gründen notwendig, nicht zuletzt aus SEO und Zugänglichkeit.

    – Daniel Priden

    15. Juli 2010 um 7:11 Uhr


  • “Dumm ist wer dummes tut” Wir waren alle schon einmal dort 🙂

    – nimmthin

    15. Juli 2010 um 12:24 Uhr

Benutzeravatar von Chris
Chris

Das ist also alt, aber … nur für den Fall, dass jemand dies bei einer Suche findet.

Benutz einfach "#/" anstatt "#" und die Seite springt nicht.

  • das funktioniert, weil es zu dem benannten Anker navigiert /Nicht weil #/ hat irgendeine Bedeutung. mit kannst du das gleiche machen #whateveryouwant und es wird einen Sprung nach oben verhindern

    – Slang

    12. Juni 2015 um 15:54 Uhr

  • @slang, obwohl du Recht hast, und das ist nur Spitzfindigkeit, aber ich würde lieber “#/” anstelle von “#whateveryouwant” verwenden, weil “#/” ziemlich häufig verwendet wird und somit Absichten verrät (Clean Code). Es könnte jedoch immer noch eine Ergänzung zur Antwort sein.

    – jobbert

    4. Mai 2016 um 11:01 Uhr


  • Achtung – dies erstellt einen Datensatz im Browserverlauf, sodass das Zurückklicken nicht das bewirkt, was der Benutzer nach dem Klicken auf einen Link erwartet #/ oder sonst was zB #whatever.

    – Studiozeit

    5. September 2016 um 7:36 Uhr


  • @DarrenSweeney Sie haben Recht, aber die Verwendung eines # erstellt auch einen Datensatz im Browserverlauf. Grundsätzlich ist das Verhalten gleich.

    – Gary Brunton

    11. Januar 2017 um 16:51 Uhr

  • Weiß jemand, warum es überhaupt zu Sprüngen kommt?

    – Ruben S

    10. Mai 2022 um 12:15 Uhr

Benutzeravatar von BoltClock
BoltClock

Wenn Sie in jQuery das Click-Ereignis verarbeiten, Geben Sie false zurück, um zu verhindern, dass der Link auf die übliche Weise reagiert verhindern Sie die Standardaktion, die darin besteht, die zu besuchen href Attribut, vom Stattfinden (laut PoweRoys Kommentar und Eriks Antwort):

$('a.someclass').click(function(e)
{
    // Special stuff to do when this link is clicked...

    // Cancel the default action
    e.preventDefault();
});

  • @pranay: OP hat angegeben, dass er jQuery verwendet, um mit diesen Links zu arbeiten.

    – BoltClock

    15. Juli 2010 um 5:40 Uhr

  • Anstatt false zurückzugeben, führen Sie ein event.preventDefault() aus. Dies ist für die Personen, die Ihren Code lesen, klarer.

    – RvdK

    15. Juli 2010 um 6:06 Uhr

  • @PoweRoy: Verstanden. Ich habe die Bearbeitung vorgenommen und etwas Neues gelernt 🙂

    – BoltClock

    15. Juli 2010 um 6:24 Uhr

  • @BoltClock Das OP sollte Schaltflächen verwenden, um die Klickereignisse anstelle von Ankern zu verarbeiten. Ihre Antwort ist ziemlich nützlich, aber in dem Fall, wenn href irgendwo hinzeigt und Sie die Weiterleitung nicht benötigen im Augenblick. Das Verhindern von Fehlverhalten von überhaupt nicht benötigten Handlungen ist eine Art Ratschlag wie: Nimm das Messer, greife die Klinge und hämmere die Nägel mit dem Griff ein 🙂 Nimm ein richtiges Werkzeug für den Job!

    – nimmthin

    15. Juli 2010 um 7:14 Uhr

  • Wenn jquery: $('a[href=#]').click(function(e) { e.preventDefault(); });

    – Schnupftabak

    5. Mai 2018 um 10:40 Uhr


du kannst es auch einfach so schreiben:

<a href="https://stackoverflow.com/questions/3252730/javascript:void(0);"></a>

Ich bin mir nicht sicher, ob es ein besserer Weg ist, aber es ist ein Weg 🙂

  • Diese Methode war für Prä-HTML 4 in Ordnung, aber heute ist sie sehr schlecht, da sie zu viele Navigationsaktionen wie “Link in neuem Tab öffnen” unterbricht.

    – Steve-o

    15. Juli 2010 um 7:20 Uhr

  • Sie haben vielleicht Recht, aber … in diesem Fall spielt es keine Rolle, weil er ein Onclick-Ereignis gibt, also würde das Öffnen des Links in einem neuen Tab sowieso nicht funktionieren …

    – Typ Schaller

    15. Juli 2010 um 8:48 Uhr

  • Abkürzung ist href='javascript:;' aber seien Sie vorsichtig, es löst das Ereignis window.beforeUnload im IE aus

    – Michir

    20. Mai 2016 um 7:22 Uhr

  • Dies könnte seine eigene Funktion unterbrechen? Denn wenn ich das mache, wird meine Funktion zum Rendern von Folien nicht mehr ausgelöst.

    – Benutzer3806549

    13. September 2016 um 9:47 Uhr

Benutzeravatar von Nabi KAZ
Nabi Kas

Lösung #1: (einfach)

<a href="#!" class="someclass">Text</a>

Lösung #2: (erforderlich javascript)

<a href="https://stackoverflow.com/questions/3252730/javascript:void(0);" class="someclass">Text</a>

Lösung #3: (erforderlich jQuery)

<a href="#" class="someclass">Text</a>
<script>
$('a.someclass').click(function(e) {
    e.preventDefault();
});
</script>

Sie können verwenden event.preventDefault() um es zu umgehen. Lesen Sie hier mehr: http://api.jquery.com/event.preventDefault/.

Benutz einfach <input type="button" /> anstatt <a> und verwenden Sie CSS, um es so zu gestalten, dass es wie ein Link aussieht, wenn Sie möchten.

Schaltflächen werden speziell zum Klicken erstellt und benötigen keine href-Attribute.

Der beste Weg ist, die Onload-Aktion zu verwenden, um die Schaltfläche zu erstellen und sie an der gewünschten Stelle über Javascript anzufügen, sodass sie bei deaktiviertem Javascript überhaupt nicht angezeigt werden und den Benutzer nicht verwirren.

Wenn Sie verwenden href="#" Sie erhalten unzählige verschiedene Links, die auf denselben Ort verweisen, was nicht funktioniert, wenn der Agent kein JavaScript unterstützt.

Benutzeravatar von Neothor
Neothor

Wenn Sie einen Anker verwenden möchten, können Sie verwenden http://api.jquery.com/event.preventDefault/ wie die anderen Antworten vorgeschlagen.

Sie können auch jedes andere Element wie eine Spanne verwenden und das Click-Ereignis daran anhängen.

$("span.clickable").click(function(){
alert('Yeah I was clicked');
});

1447060cookie-checkWie kann ich verhindern, dass ein Klick auf einen „#“-Link zum Seitenanfang springt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy