Utwórz link HTML, który nic nie robi (dosłownie nic)


87

Chcę linku, który nic nie robi. Nie chcę tego:

<a href="#">

ponieważ wtedy URL staje się something.com/whatever/#.

Jedynym powodem, dla którego chcę linku, jest to, aby użytkownik mógł zobaczyć, że może kliknąć tekst. JavaScript jest używany do wykonywania pewnych czynności, więc nie potrzebuję linku, aby nigdzie iść, ale chcę, aby wyglądał jak link!

Mógłbym użyć atrybutu danych i powiedzieć mi CSS, aby elementy wyglądały jak linki, jeśli mają ten atrybut, ale wydaje się to trochę przesadzone.


Co jest nie tak something.com/whatever/#?
Charles Sprayberry,

1
możesz dać mu href pustego miejsca i zwrócić false w javascript. Ale jest to bardziej semantyczne, jeśli po prostu zmienisz właściwość kursora na pointerw swoim CSS
JohnP

@CharlesSprayberry: Są sytuacje, w których tego nie chcesz.
PeeHaa

To byłoby dobre pytanie również na ux.stackexchange.com .

1
To pytanie jest omówione bardziej szczegółowo tutaj: stackoverflow.com/questions/134845/ ...
DawnPaladin

Odpowiedzi:


125

Poniższe działania zapobiegną uruchomieniu twojego href

<a href="#" onclick="return false;">

Jeśli używasz jQuery, event.preventDefault()może być używany


Powoduje anulowanie dodatkowych zdarzeń onclick.
Rauli Rajande

6
Powoduje przewijanie strony do góry.
David Hempy

@DavidHempy Nie doświadczam tego. Która przeglądarka?
Curt,

1
@curt Google Chrome Version 63.0.3239.84 (oficjalna kompilacja) (64-bitowa) (lub prawdopodobnie nieco starsza wersja dwa tygodnie temu)
David Hempy,

To nie działa w przypadku wtyczki Wordpress, przewijanie do id, a link nadal coś robi. W takim przypadku będzie to błędna rzecz, która przekieruje Cię na górę strony.
Jiri Otoupal イ り オ ト ウ パ ー

90

Spróbuj tego:

<a href="javascript:void(0);">link</a>

4
+1, ale krótkie pytanie: czy jest różnica między javascript:voidi javascript:void(0)?
Adam Rackis

3
Jeśli spróbujesz użyć javascript: void (0) bez parametru, otrzymasz SyntaxError i wszystkie twoje skrypty nie powiodą się.
alexdets

3
@alexdets javascript:void()będzie SyntaxError, ale javascript:voidpo prostu zwraca undefined - tak samo jak void(0). Adam, o ile wiem, voidi void(0)są funkcjonalnie równoważne dla tego zastosowania. --- edit: chociaż widzę inne komentarze, które sugerują, że może to przeładować stronę ..
andytuba

3
Czy ma znaczenie, w jaki sposób wykorzystujesz javaScript / javascript / JavaScript / Javascript?
Tim Truston,

2
@TechyTimo Nie, wielkość liter nie ma znaczenia, w rzeczywistości nie należy jej używać. Przesłałem zmianę.
Weston Ganger,

28

W HTML5 jest to bardzo proste. Po prostu pomiń hrefatrybut.

<a>Do Nothing</a>

Z MDN w atrybucie a tag href :

href

To był jedyny wymagany atrybut dla kotwic definiujących hipertekstowe łącze źródłowe, ale nie jest już wymagany w HTML5.


A co z kursorem dłoni po najechaniu kursorem?

Domyślne style przeglądarki mogą nie zmieniać kursora na wskaźnik, dla aznaczników bez href. Możesz to uniwersalnie zmienić za pomocą następującego kodu CSS.

a {
    cursor: pointer;
}
<a>Do Nothing</a>

Jednak prawdopodobnie lepiej jest być bardziej selektywnym i stosować go tylko do elementów, do których chcesz dodać programy obsługi zdarzeń.


A co powiesz na to, aby można było na niej ustawić fokus?

Po prostu dodaj tabindex="0"do elementu.

<a tabindex="0">Do Nothing</a>


Czy ma sens używanie atagu bez linku?

Zwykle nie, prawdopodobnie lepiej jest buttonzamiast tego użyć elementu i nadać mu styl za pomocą CSS. Ale bez względu na to, czego używasz, unikaj stosowania arbitralnych elementów, takich jak divjeśli to możliwe, ponieważ nie jest to wcale semantyczne.


1
W przypadku bootstrap 4 linki bez href nie są stylizowane na linki.
user3413723

13

Nie rób z tego linku (chociaż jest to preferowane) i stylizuj go za pomocą CSS, aby wyglądał jak link:

p.not-a-link { text-decoration: underline; cursor: pointer } 

Lub jeszcze lepiej po prostu uczyń go linkiem i pozwól funkcji javascript, która jest używana e.preventDefault()do blokowania linku.

Dodaj również link do href, aby użytkownicy bez włączonego JS nadal mogli z niego korzystać (jako rozwiązanie awaryjne).


1
+1 Czy po zakończeniu debaty dotyczącej IE5.5 rozpiętość byłaby lepsza niż ap?
amelvin

1
Wolę rozpiętość. P może zrobić nowy rząd, podczas gdy span nie
Ronnie Oosting

9

<a href="javascript:;">Link text</a> - tego zwykle używam


5
Czy nie spowoduje to ponownego załadowania strony w niektórych przeglądarkach?
Curt

@Curt: Masz rację, źle przeczytałeś pytanie. Masz komentarz pozytywny :-)
Scott Brown

... i mam 2 głosy przeciw, w tym jeden po edycji! Szorstki!
Scott Brown

Usuń pierwszy kod, a wtedy będę mógł usunąć mój głos negatywny :) Nie pozwoli mi to usunąć głosu przeciwnego, jest „zablokowany”
Curt

1
Na które przeglądarki ma to wpływ, czy nadal jest to problem? Byłoby to lepsze od tego void(0), ponieważ pojawia się na pasku stanu. Mówię to, ponieważ użytkownicy zgłaszają to jako błąd / błąd (którym oczywiście nie jest), więc myślę, że jest to dla nich mylące.
chunk_split

4

Możemy to osiągnąć za pomocą javascript void, który zwykle obejmuje ocenę wyrażenia i zwrócenie undefined, co obejmuje dodanie javascript:void(0);atrybutu href.

Operator void jest zwykle używany tylko do uzyskania niezdefiniowanej wartości pierwotnej, zwykle przy użyciu „void (0)” (co jest równoważne z „void 0”). W takich przypadkach można zamiast tego użyć zmiennej globalnej undefined (zakładając, że nie została ona przypisana do wartości innej niż domyślna).

a {
  text-decoration: initial;
}
<a href="javascript:void(0);"> This link actually does nothing when clicked</a>


2

Odpowiedź @Curt będzie działać, ale możesz użyć stylu kursora w css, aby wyglądał jak link bez kłopotów z wygenerowaniem fałszywego linku. Użyj dłoni lub wskaźnika w zależności od zgodności przeglądarki.

Wskaźnik CSS zgodny z przeglądarkami (z przewodnika po stylach kursora ):

element {
    cursor: pointer;
    cursor: hand;
}

@PeeHaa Po prostu używaj wskaźnika tylko wtedy, gdy nie chcesz, aby działał w IE5.5 i wcześniejszych!
amelvin

3
To co powiedziałem! Proszę nie wspominać o IE5.5: P Mówiąc bardziej poważnie, udział IE5.5 to 0.17%. Jeśli ludzie nadal korzystają z tej wersji, nie zasługują na przeglądanie sieci
PeeHaa

2

jednym ze sposobów, o którym nikt nie wspomniał, jest wskazanie href do pustej lokalizacji pliku lokalnego, tak jak to

<a href='\\'>my dead link</a>

czemu? Jeśli używasz frameworka takiego jak reaguj lub angular, kompilator wypluje pewne ostrzeżenia, które mogą zabrudzić dziennik lub konsolę. Ta technika zapobiega również nieprawidłowemu łączeniu elementów przez roboty lub pająki.


-1

NIE UŻYWAJ <a>... zamiast tego użyj, <span class='style-like-link'> a następnie użyj klasy, aby nadać jej styl, jak chcesz.


Nie ma nic złego w używaniu tagu kotwicy bez samego linku, nie wspominając o tym, że jest wiele przypadków, w których byłoby to o wiele bardziej sensowne, zamiast zastępowania go znacznikiem pseudo-kotwicy. Nie wspominając o stylizacji jednego elementu tak, aby wyglądał jak inny, ale zostanie zaimplementowany w inny sposób, może spowodować problemy z konserwacją w przyszłości
Tim

Zgoda. Zależy to całkowicie od przypadku użycia i tego, co próbujesz osiągnąć. Podałem to tylko jako odpowiedź, aby pomóc innym wiedzieć, że to jest opcja.
Bryce

Jeśli tak jest, sugerowałbym edycję go tak, aby używał języka, który pokazuje, że jest to możliwa alternatywa, zamiast stwierdzać wielkimi literami, aby nie używać do tego standardowego tagu kotwicy, kiedy jest to całkowicie prawidłowe
Tim
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.