Crea un collegamento HTML che non fa nulla (letteralmente nulla)


87

Voglio un collegamento che non fa nulla. Non voglio questo:

<a href="#">

perché allora l'URL diventa something.com/whatever/#.

L'unico motivo per cui voglio un collegamento è che l'utente possa vedere che può fare clic sul testo. JavaScript viene utilizzato per eseguire alcune azioni, quindi non ho bisogno del collegamento per andare da nessuna parte, ma ho bisogno che assomigli a un collegamento!

Potrei usare alcuni attributi di dati e dirmi ai CSS di rendere gli elementi simili a collegamenti se hanno questo attributo, ma sembra un po 'eccessivo.


Cosa c'è che non va something.com/whatever/#?
Charles Sprayberry

1
potresti dargli un href di vuoto e restituire false nel javascript. Ma è più semantico se modifichi la proprietà del cursore su pointernel tuo CSS
JohnP

@CharlesSprayberry: ci sono situazioni in cui non lo vuoi.
PeeHaa

Questa sarebbe una buona domanda da porre anche su ux.stackexchange.com .

1
Questa domanda è discusso in modo più approfondito qui: stackoverflow.com/questions/134845/...
DawnPaladin

Risposte:


125

Quanto segue impedirà al tuo href di essere eseguito

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

Se stai usando jQuery, event.preventDefault()puoi usare


Causa l'annullamento di ulteriori eventi onclick.
Rauli Rajande

6
Fa scorrere la pagina verso l'alto.
David Hempy

@DavidHempy Non ho esperienza di questo. Quale browser?
Curt

1
@curt Google Chrome versione 63.0.3239.84 (build ufficiale) (64 bit) (o forse una versione leggermente più vecchia due settimane fa)
David Hempy

Questo non funziona con lo scorrimento del plugin wordpress fino all'ID e il collegamento farà comunque qualcosa. In questo caso, sarà una cosa bacata che ti reindirizzerà nella parte superiore della pagina.
Jiri Otoupal イ り オ ト ウ パ ー

89

Prova questo:

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

4
+1 ma domanda veloce: c'è una differenza tra javascript:voide javascript:void(0)?
Adam Rackis

3
Se proverai a usare javascript: void (0) senza parametro avrai SyntaxError e tutti i tuoi script falliranno.
alexdets

3
@alexdets javascript:void()sarà SyntaxError, ma javascript:voidrestituisce solo undefined, come void(0). Adam, per quanto ne so, voide void(0)sono funzionalmente equivalenti per questo uso. --- modifica: anche se vedo altri commenti che suggeriscono che potrebbe ricaricare la pagina ..
andytuba

3
È importante come si capitalizzano javaScript / javascript / JavaScript / Javascript?
Tim Truston

2
@TechyTimo No la maiuscola non ha importanza, infatti non dovrebbe essere maiuscola. Ho inviato una modifica.
Weston Ganger

28

In HTML5, questo è molto semplice. Basta omettere l' hrefattributo.

<a>Do Nothing</a>

Da MDN sull'attributo href del tag :

href

Questo era l'unico attributo richiesto per le ancore che definiscono un collegamento sorgente ipertestuale, ma non è più richiesto in HTML5.


E il cursore della mano al passaggio del mouse?

Gli stili predefiniti per un browser potrebbero non cambiare il cursore in un puntatore, per i atag con no href. Puoi cambiarlo universalmente con il seguente CSS.

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

Tuttavia, probabilmente è meglio essere più selettivi al riguardo e applicarlo solo agli elementi a cui si intende aggiungere gestori di eventi.


Che ne dici di renderlo attivabile tramite tabulazione?

Basta aggiungere tabindex="0"all'elemento.

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


Ha senso utilizzare un atag senza un collegamento?

Di solito no, probabilmente è meglio usare buttoninvece un elemento e modellarlo con CSS. Ma qualunque cosa tu usi, evita di usare un elemento arbitrario come divquando possibile, poiché questo non è affatto semantico.


1
Con bootstrap 4, i collegamenti che non hanno un href non vengono designati come collegamenti.
user3413723

13

Non renderlo un collegamento (anche se è preferibile farlo) e modellalo con CSS in modo che assomigli a un collegamento:

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

O ancora meglio crearlo semplicemente un collegamento e lasciare che la funzione javascript che viene utilizzata e.preventDefault()per impedire il collegamento.

Aggiungi anche il collegamento a in hrefmodo che gli utenti senza JS abilitato possano ancora utilizzarlo (come fallback).


1
+1 Con il dibattito su IE5.5 concluso, sarebbe meglio un intervallo di un ap?
amelvin

1
Preferisco span. P potrebbe fare una nuova fila, mentre lo span non lo fa
Ronnie Oosting il

9

<a href="javascript:;">Link text</a> - è quello che uso di solito


5
Questo non ricaricherà la pagina con alcuni browser?
Curt

@ Curt: hai ragione, hai letto male la domanda. Hai un commento positivo :-)
Scott Brown

... e ho 2 voti negativi, incluso uno dopo averlo modificato! Duro!
Scott Brown

Rimuovi il primo codice, quindi mi sarà permesso di rimuovere il mio voto negativo :) Non mi permetterà di rimuovere il voto negativo, è "bloccato"
Curt

1
Su quali browser influisce, è ancora un problema? Questo sarebbe preferito void(0), perché è emerso nella barra di stato. Lo dico perché gli utenti lo segnalano come un bug / errore (cosa che ovviamente non è), quindi penso che averlo sia fonte di confusione per loro.
chunk_split

4

Possiamo ottenere ciò utilizzando javascript void che normalmente comporta la valutazione di un'espressione e la restituzione di undefined, che include l'aggiunta di javascript:void(0);href.

L'operatore void viene solitamente utilizzato semplicemente per ottenere un valore primitivo non definito, di solito utilizzando "void (0)" (che è equivalente a "void 0"). In questi casi, è invece possibile utilizzare la variabile globale undefined (supponendo che non sia stata assegnata a un valore non predefinito).

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


2

La risposta di @ Curt funzionerà, ma puoi usare uno stile cursore in CSS per farlo sembrare un collegamento senza il fastidio di generare un collegamento fasullo. Usa la mano o il puntatore a seconda della conformità del browser.

Puntatore conforme al browser incrociato CSS (dalla guida allo stile del cursore ):

element {
    cursor: pointer;
    cursor: hand;
}

@PeeHaa Usa il puntatore solo se non vuoi che funzioni in IE5.5 e versioni precedenti!
amelvin

3
È quello che ho detto! Per favore, non menzionare IE5.5: P In una nota più seria, la condivisione di IE5.5 è 0.17%. Se le persone sono ancora su quella versione non meritano di navigare sul web
PeeHaa

2

un modo che nessuno ha menzionato è puntare l'href a una posizione di file locale vuota in questo modo

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

perché? Se usi un framework come react o angular, il compilatore emetterà alcuni avvertimenti che possono sporcare il tuo log o la tua console. Questa tecnica impedirà anche a robot o ragni di collegare in modo errato le cose.


-1

NON USARE <a>... invece usa <span class='style-like-link'> e poi usa la classe per modellarlo come vuoi.


Non c'è niente di sbagliato nell'usare un anchor tag senza un link stesso, per non parlare del fatto che ci sono molti casi in cui avrebbe molto più senso farlo, piuttosto che sostituirlo con uno pseudo-anchor tag. Per non parlare dello stile di un elemento in modo che assomigli a un altro, ma essere implementato in modo diverso è destinato a causare problemi di manutenzione in futuro
Tim

Concordato. Dipende interamente dal caso d'uso e da ciò che stai cercando di realizzare. L'ho semplicemente fornito come risposta per aiutare gli altri a sapere che questa è un'opzione.
Bryce

In tal caso, suggerirei di modificarlo per utilizzare un linguaggio che mostri che è una possibile alternativa, piuttosto che affermare in maiuscolo di non utilizzare un tag di ancoraggio standard per questo, quando è perfettamente valido per farlo
Tim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.