Jestem tutaj z Davidem Dorwardem i gargantaun w sprawie powiązanego duplikatu pytania. Jeśli masz linki na swojej stronie, muszą funkcjonować jak zwykłe linki. Jeśli JavaScript przechwytuje je i robi coś innego, wszystko dobrze i dobrze, ale musisz mieć tam prawdziwy link, który prowadzi do prawdziwej strony. Jest to konieczne z różnych powodów, w tym SEO i dostępności.
W jQuery podczas obsługi zdarzenia click zwraca false, aby zatrzymać odpowiedź linku w zwykły sposóbuniemożliwić wykonanie domyślnej akcji hrefpolegającej na odwiedzeniu atrybutu (zgodnie z komentarzem PoweRoy i odpowiedzią Erika ):
$('a.someclass').click(function(e){// Special stuff to do when this link is clicked...// Cancel the default action
e.preventDefault();});
@BoltClock OP powinien używać przycisków do obsługi zdarzeń kliknięcia zamiast zakotwiczeń. Twoja odpowiedź jest całkiem przydatna, ale w przypadku, gdy href wskazuje gdzieś i nie potrzebujesz w tej chwili przekierowania . Zapobieganie domyślnemu zachowaniu działania, które wcale nie jest potrzebne, jest rodzajem porady: weź nóż, chwyć ostrze i wbij gwoździe za pomocą rączki :) Weź odpowiednie narzędzie do pracy!
to działa, ponieważ prowadzi do nazwanej kotwicy /, a nie dlatego, że #/ma jakiekolwiek znaczenie. możesz zrobić to samo, #whateveryouwanta to zapobiegnie skokowi na szczyt
@slang, chociaż masz rację, a to po prostu nitpicking, ale wolałbym używać „# /” zamiast „#whateveryouwant”, ponieważ „# /” jest używane dość często, a tym samym ujawnia zamiary (Clean Code). Może to jednak stanowić dodatek do odpowiedzi.
Uwaga - tworzy to zapis w historii przeglądarki, więc kliknięcie wstecz nie zrobi tego, co użytkownik myśli, że zrobi po kliknięciu linku #/lub czegoś innego, np #whatever.
Ta metoda była odpowiednia dla wersji wcześniejszych niż HTML 4, ale dziś jest to bardzo zła praktyka, ponieważ łamie zbyt wiele działań nawigacyjnych, takich jak „otwórz link w nowej karcie”.
może masz rację, ale ... w tym przypadku nie ma to znaczenia, ponieważ on daje zdarzenie onclick, więc i tak otwarty link w nowej karcie i tak by nie działał ...
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.
Wygląda mi na to, że dodaje moduł obsługi kliknięć do dowolnej kotwicy, z którą jest związany odnośnik „#”. W ten sposób nie będziesz musiał wyszukiwać wszystkich programów obsługi kliknięć, które już masz, i dodać w nich e.preventDefault ().
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.
Linki z href = "#" powinny prawie zawsze zostać zastąpione elementem przycisku:
<button class="someclass">Text</button>
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.
Zasadniczo nie polecam tego podejścia, ponieważ nie ma akcji zastępczej, jeśli użytkownik wyłączył js. Ale biorąc pod uwagę, że masz już ustawiony href #, 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.
Może również użyć <div>. Uważam, że celem utrzymania <a> jest zachowanie stylu, który jest już zdefiniowany przez zwykłe <a>. Bez href nie będzie wykrywany i stylizowany jak inne <a>.
#/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.
Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, jak i / lub dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi.
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.
<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>
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.