Ich verwende derzeit <a>
Tags mit jQuery, um Dinge wie Klickereignisse usw. zu initiieren.
Beispiel ist <a href="#" class="someclass">Text</a>
Aber ich hasse es, wie das '#' die Seite an den Anfang der Seite springt. Was kann ich stattdessen tun?
javascript
jquery
html
st4ck0v3rfl0w
quelle
quelle
Antworten:
Wenn Sie in jQuery das Klickereignis behandeln,
Geben Sie false zurück, um zu verhindern, dass der Link wie gewohnt reagiertVerhindern Sie, dass die Standardaktion "Besuch deshref
Attributs" ausgeführt wird (gemäß PoweRoys Kommentar und Eriks Antwort ):quelle
$('a[href=#]').click(function(e) { e.preventDefault(); });
Das ist also alt, aber ... nur für den Fall, dass jemand dies bei einer Suche findet.
Verwenden Sie einfach
"#/"
anstelle von"#"
und die Seite springt nicht.quelle
/
, nicht weil#/
es irgendeine Bedeutung hat. Sie können das gleiche mit tun#whateveryouwant
und es wird einen Sprung nach oben verhindern#/
oder etwas anderem glaubt, z#whatever
.Sie können es sogar einfach so schreiben:
Ich bin mir nicht sicher, ob es ein besserer Weg ist, aber es ist ein Weg :)
quelle
href='javascript:;'
aber seien Sie vorsichtig, es löst window.beforeUnload-Ereignis in IELösung Nr. 1: (einfach)
Lösung 2: (benötigt
javascript
)Lösung 3: (benötigt
jQuery
)quelle
Sie können dies verwenden
event.preventDefault()
, um dies zu vermeiden. Lesen Sie hier mehr: http://api.jquery.com/event.preventDefault/ .quelle
Verwenden Sie einfach
<input type="button" />
anstelle von<a>
und verwenden Sie CSS, um es so zu gestalten, dass es wie ein Link aussieht, wenn Sie dies wünschen.Schaltflächen wurden speziell zum Klicken erstellt und benötigen keine href-Attribute.
Am besten erstellen Sie die Schaltfläche mithilfe der Onload-Aktion und hängen sie über Javascript an die gewünschte Stelle. Wenn Javascript deaktiviert ist, werden sie überhaupt nicht angezeigt und verwirren den Benutzer nicht.
Wenn Sie verwenden, erhalten
href="#"
Sie unzählige verschiedene Links, die auf denselben Speicherort verweisen. Dies funktioniert nicht, wenn der Agent JavaScript nicht unterstützt.quelle
#
.Wenn Sie einen Anker verwenden möchten, können Sie http://api.jquery.com/event.preventDefault/ wie die anderen vorgeschlagenen Antworten verwenden.
Sie können auch ein anderes Element wie eine Spanne verwenden und das Klickereignis daran anhängen.
quelle
Sie können
#0
als href verwenden, da0
die Seite nicht als ID zulässig ist und die Seite nicht springt.quelle
quelle
Benutz einfach
JQUERY
quelle
Wenn das Element keinen aussagekräftigen href-Wert hat, handelt es sich nicht wirklich um einen Link. Warum also nicht stattdessen ein anderes Element verwenden?
Wie von Neothor vorgeschlagen, ist eine Spanne genauso angemessen und bei korrekter Gestaltung als Element sichtbar, auf das geklickt werden kann. Sie können sogar ein Hover-Ereignis anhängen, um das Element zum Leuchten zu bringen, wenn sich die Maus des Benutzers darüber bewegt.
Nachdem Sie dies gesagt haben, möchten Sie möglicherweise das Design Ihrer Site überdenken, damit sie ohne Javascript funktioniert, aber durch Javascript erweitert wird, wenn es verfügbar ist.
quelle
Links mit href = "#" sollten fast immer durch ein Schaltflächenelement ersetzt werden:
Die Verwendung von Links mit href = "#" ist ebenfalls ein Problem der Barrierefreiheit, da diese Links für Bildschirmleser sichtbar sind, die "Link - Text" auslesen. Wenn der Benutzer jedoch auf klickt, wird er nirgendwo hingehen.
quelle
Sie können einfach ein Ankertag ohne href-Eigenschaft übergeben und mit jQuery die erforderliche Aktion ausführen:
<a class="foo">bar</a>
quelle
#
ging ich davon aus, dass dies für Sie kein Problem darstellt, und bot diese Lösung daher an, da dies wahrscheinlich das einfachste Mittel ist, um Ihren Bedarf zu decken.a:link
CSS-Selektoren zielen nicht auf dieses Ankertag.Ich habe benutzt:
quelle
Der
#/
Trick funktioniert, fügt dem Browser jedoch ein Verlaufsereignis hinzu. Das Zurückklicken funktioniert also nicht so, wie es der Benutzer möchte / erwartet.$('body').click('a[href="#"]', function(e) {e.preventDefault() });
ist der Weg, den ich gegangen bin, da er für bereits vorhandene Inhalte und alle Elemente funktioniert, die nach dem Laden zum DOM hinzugefügt wurden.Insbesondere musste ich dies in einem Bootstrap-Dropdown-Menü innerhalb einer
.btn-group
(Referenz) tun, also tat ich Folgendes :$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });
Auf diese Weise wurde es gezielt und hatte keinen Einfluss auf etwas anderes auf der Seite.
quelle
Ich habe immer verwendet:
beim Versuch, den Seitensprung zu verhindern. Ich bin mir nicht sicher, ob dies das Beste ist, aber es scheint seit Jahren gut zu funktionieren.
quelle
Es gibt 4 ähnliche Möglichkeiten, um zu verhindern, dass die Seite ohne JavaScript nach oben springt:
Option 1:
Option 2:
Option 3:
Option 4 ( nicht empfohlen ):
Es ist jedoch besser zu verwenden,
event.preventDefault()
wenn Sie das Klickereignis in jQuery übergeben.quelle
Sie können auch false zurückgeben, nachdem Sie Ihre Abfrage verarbeitet haben.
Z.B.
quelle
Ich benutze so etwas:
quelle
Um zu verhindern, dass die Seite springt, müssen Sie nach dem Aufruf
e.stopPropagation();
Folgendes aufrufene.preventDefault();
:stopPropagation
verhindert, dass das Ereignis in den DOM-Baum aufgenommen wird. Weitere Informationen hier: https://api.jquery.com/event.stoppropagation/quelle
Wenn Sie zu einem Ankerabschnitt auf derselben Seite migrieren möchten, ohne dass eine Seite hochspringt, verwenden Sie:
Verwenden Sie einfach "# /" anstelle von "#", z
quelle
Wenn Sie etwas hinzufügen, wird
#
der Seitenfokus auf das Element mit dieser ID gesetzt. Die einfachste Lösung ist die Verwendung,#/
auch wenn Sie jQuery verwenden. Wenn Sie das Ereignis jedoch in jQuery behandeln,event.preventDefault()
ist dies der richtige Weg.quelle
Das
<a href="#!">Link</a>
und<a href="#/">Link</a>
funktioniert nicht, wenn man mehr als einmal auf denselben Eingang klicken muss. Es dauert nur 1 Ereignisklick für jeden auf mehrere Eingänge.Der beste Weg ist immer noch mit
<a href="#">Link</a>
dann,
quelle