Obecnie używam <a>
tagów z jQuery do inicjowania rzeczy takich jak zdarzenia kliknięcia itp.
Przykładem jest <a href="#" class="someclass">Text</a>
Ale nienawidzę tego, jak „#” powoduje, że strona przeskakuje na górę strony. Co mogę zamiast tego zrobić?
javascript
jquery
html
st4ck0v3rfl0w
źródło
źródło
Odpowiedzi:
W jQuery podczas obsługi zdarzenia click
zwraca false, aby zatrzymać odpowiedź linku w zwykły sposóbuniemożliwić wykonanie domyślnej akcjihref
polegającej na odwiedzeniu atrybutu (zgodnie z komentarzem PoweRoy i odpowiedzią Erika ):źródło
$('a[href=#]').click(function(e) { e.preventDefault(); });
To jest stare, ale ... na wypadek, gdyby ktoś znalazł to podczas wyszukiwania.
Wystarczy użyć
"#/"
zamiast,"#"
a strona nie przeskoczy.źródło
/
, a nie dlatego, że#/
ma jakiekolwiek znaczenie. możesz zrobić to samo,#whateveryouwant
a to zapobiegnie skokowi na szczyt#/
lub czegoś innego, np#whatever
.możesz nawet napisać to tak:
nie jestem pewien, czy to lepszy sposób, ale jest to sposób :)
źródło
href='javascript:;'
ostrożny, ale wywołuje zdarzenie window.beforeUnload w IERozwiązanie nr 1: (zwykłe)
Rozwiązanie nr 2: (potrzebne
javascript
)Rozwiązanie nr 3: (potrzebne
jQuery
)źródło
Możesz użyć,
event.preventDefault()
aby tego uniknąć. Przeczytaj więcej tutaj: http://api.jquery.com/event.preventDefault/ .źródło
Wystarczy użyć
<input type="button" />
zamiast<a>
i użyj CSS, aby stylizować go tak, aby wyglądał jak link, jeśli chcesz.Przyciski są stworzone specjalnie do klikania i nie wymagają żadnych atrybutów href.
Najlepszym sposobem jest użycie akcji onload, aby utworzyć przycisk i dołączyć go w razie potrzeby za pomocą javascript, więc przy wyłączonym javascript nie będą się w ogóle wyświetlać i nie dezorientują użytkownika.
Podczas korzystania
href="#"
dostajesz mnóstwo różnych linków prowadzących do tej samej lokalizacji, co nie będzie działać, gdy agent nie obsługuje JavaScript.źródło
#
.Jeśli chcesz użyć kotwicy, możesz użyć http://api.jquery.com/event.preventDefault/, podobnie jak inne sugerowane odpowiedzi.
Możesz także użyć dowolnego innego elementu, takiego jak zakres, i dołączyć do niego zdarzenie click.
źródło
Możesz użyć
#0
jako href, ponieważ0
nie jest dozwolony jako identyfikator, strona nie przeskoczy.źródło
źródło
Po prostu użyj
JQUERY
źródło
Jeśli element nie ma znaczącej wartości href, to tak naprawdę nie jest to link, więc dlaczego nie użyć innego elementu?
Jak sugeruje Neothor, rozpiętość jest tak samo odpowiednia, a jeśli zostanie poprawnie zaprojektowana, będzie wyraźnie widoczna jako element, który można kliknąć. Możesz nawet dołączyć zdarzenie aktywowania, aby elemnt „zapalił się”, gdy mysz nad nim przesunie się.
Jednak powiedziawszy to, możesz przemyśleć projekt swojej witryny, aby działała bez javascript, ale jest ulepszona przez javascript, gdy jest dostępny.
źródło
Linki z href = "#" powinny prawie zawsze zostać zastąpione elementem przycisku:
Korzystanie z linków z href = "#" również stanowi problem w zakresie dostępności, ponieważ linki te będą widoczne dla czytników ekranu, które będą czytać "Link - tekst", ale jeśli użytkownik kliknie, nigdzie nie przejdzie.
źródło
Możesz po prostu przekazać tag zakotwiczenia bez właściwości href i użyć jQuery do wykonania wymaganej akcji:
<a class="foo">bar</a>
źródło
#
, założyłem, że to nie dotyczy ciebie, i dlatego zaoferowałem to rozwiązanie, ponieważ jest to prawdopodobnie najprostszy sposób zaspokojenia twoich potrzeb.a:link
Selektory CSS nie będą kierować na ten tag zakotwiczenia.Używałem:
źródło
#/
Sztuczka działa, ale dodaje zdarzenie historię w przeglądarce. Zatem kliknięcie wstecz nie działa tak, jak użytkownik może tego oczekiwać / oczekiwać.$('body').click('a[href="#"]', function(e) {e.preventDefault() });
jest to sposób, w jaki poszedłem, ponieważ działa na już istniejącą zawartość i wszelkie elementy dodane do DOM po załadowaniu.W szczególności musiałem to zrobić w menu rozwijanym bootstrap w
.btn-group
(Reference) , więc:$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });
W ten sposób był ukierunkowany i nie wpływał na nic innego na stronie.
źródło
Zawsze używałem:
podczas próby uniknięcia przeskoku strony. Nie jestem pewien, czy to jest najlepsze, ale wydaje się, że działa dobrze od lat.
źródło
Istnieją 4 podobne sposoby zapobiegania przeskakiwaniu strony na górę bez użycia JavaScript:
Opcja 1:
Opcja 2:
Opcja 3:
Opcja 4 ( niezalecana ):
Ale lepiej jest użyć,
event.preventDefault()
jeśli przekazujesz zdarzenie click w jQuery.źródło
Możesz również zwrócić wartość false po przetworzeniu swojej jquery.
Na przykład.
źródło
Używam czegoś takiego:
źródło
Aby zapobiec przeskakiwaniu strony, musisz zadzwonić
e.stopPropagation();
po zadzwonieniue.preventDefault();
:stopPropagation
zapobiega wejściu zdarzenia do drzewa DOM. Więcej informacji tutaj: https://api.jquery.com/event.stoppropagation/źródło
Jeśli chcesz przeprowadzić migrację do sekcji zakotwiczenia na tej samej stronie bez przeskakiwania strony, użyj:
Wystarczy użyć „# /” zamiast „#” np
źródło
Dodanie czegoś po
#
ustawia fokus strony do elementu o tym identyfikatorze. Najprostszym rozwiązaniem jest użycie,#/
nawet jeśli używasz jQuery. Jednak jeśli zajmujesz się zdarzeniem w jQuery,event.preventDefault()
jest to dobra droga.źródło
<a href="#!">Link</a>
I<a href="#/">Link</a>
nie zadziała, jeśli trzeba kliknąć na samym wejściu więcej niż jeden raz .. to tylko w 1 zdarzenie kliknięcia dla każdego na wielu nakładów.wciąż najlepszym sposobem jest
<a href="#">Link</a>
następnie,
źródło