Cosa fa l'espressione href <a href=annunciojavascript:;ppure> </a>?


228

Ho visto il seguente href usato di tanto in tanto nelle pagine web. Tuttavia, non capisco cosa stia cercando di fare o la tecnica. Qualcuno può elaborare per favore?

<a href="javascript:;"></a>

2
Puoi chiamare un metodo JS con questo se non sbaglio .. javascript: SomeFunction ()
Rob

1
Non sta cercando di fare nulla che non possa essere gestito meglio con un gestore di clic adeguato. Dovresti evitarlo perché è brutto, inaccessibile e ha indotto le persone a utilizzare lo javascript:schema in cui non dovrebbe essere utilizzato ( onclick="javascript:…")
Gareth,

Risposte:


247

Un <a>elemento è HTML non valido a meno che non abbia un attributo hrefo name.

Se vuoi renderlo correttamente come link (es. Sottolineato, puntatore a mano, ecc.), Lo farà solo se ha un hrefattributo.

Codice come questo viene quindi talvolta utilizzato come modo per creare un collegamento, ma senza dover fornire un URL effettivo hrefnell'attributo. Lo sviluppatore ovviamente voleva che il link stesso non facesse nulla, e questo era il modo più semplice che conosceva.

Probabilmente ha qualche codice evento javascript altrove che viene attivato quando si fa clic sul collegamento e sarà quello che vuole effettivamente accadere, ma vuole che assomigli ad un normale <a>collegamento tag.

Alcuni sviluppatori usano href='#'per lo stesso scopo, ma questo fa sì che il browser salti all'inizio della pagina, il che potrebbe non essere desiderato. E non poteva semplicemente lasciare l'href vuoto, perché href=''è un collegamento alla pagina corrente (cioè provoca un aggiornamento della pagina).

Ci sono modi per aggirare queste cose. L'uso di un bit vuoto di codice Javascript in hrefè uno di questi, e sebbene non sia la soluzione migliore, funziona.


16
Per curiosità, c'è un modo migliore per farlo?
Rahman Kalfane,

28
un modo migliore per farlo è se la funzione evento lo fa return false;o event.preventDefault()l' hrefazione non verrà mai chiamata, quindi puoi inserire qualcosa di più sensato.
Spudley,

6
Un <a>senza hrefo namenon è non valido; questo può essere facilmente verificato usando un validatore.
Jukka K. Korpela,

2
Il frammento (sezione #) non dovrebbe nemmeno essere inviato al server web secondo le specifiche, quindi è probabile che il tuo browser stia facendo qualcosa di sbagliato lì.
Joshua Walsh,

2
Sì a quello che ha detto @YoshieMaster. Se l'URL ha un # frammento , che non viene mai inviato al server Web (o, quindi, al firewall); viene utilizzato solo internamente dal browser. In questo caso, facendo clic su un collegamento taggato con <a href="#">... </a>, il browser non invierà alcuna richiesta HTTP da nessuna parte; tutto ciò che farà è scorrere fino all'inizio della pagina.
Mark Reed,

38

fondamentalmente invece di usare il link per spostare pagine (o ancore), usando questo metodo avvia una o più funzioni javascript

<script>
function doSomething() {
  alert("hello")
}
</script>
<a href="javascript:doSomething();">click me</a>

facendo clic sul collegamento verrà generato l'avviso.


31

Esistono diversi meccanismi per evitare un collegamento per raggiungere la sua destinazione. Quello della domanda non è molto intuitivo.

Un'opzione più pulita è utilizzare href="#no"dove #noè presente un'ancora non definita nel documento.

È possibile utilizzare un nome più semantico come #disable o #action per aumentare la leggibilità.

Vantaggi dell'approccio:

  • Evita l'effetto "spostandosi verso l'alto" dell'href = "#" vuoto
  • Evita l'uso di JavaScript

svantaggi:

  • Devi essere sicuro che il nome dell'ancora non sia usato nel documento.

Dato che l' <a>elemento non agisce come un collegamento, l'opzione migliore in questi casi non sta usando un <a>elemento ma a <div>e fornisce lo stile desiderato di collegamento.


13
Mi piace anche l'ancora non definita. Tuttavia, un altro aspetto negativo è che aggiunge l'ancoraggio alla cronologia del browser, quindi scelgo di utilizzare il metodo JS vuoto nell'OP.
John Reid,

10
<a href="javascript:alert('Hello');"></a>

è solo una scorciatoia per:

<a href="" onclick="alert('Hello'); return false;"></a>

3
Un po 'ma non è un vero confronto "like for like". Questo è un motivo per cui alcuni cadono nella trappola del loro utilizzo in primo luogo.
Lankymart,

9

È un modo per fare in modo che un collegamento non faccia assolutamente nulla quando si fa clic (a meno che gli eventi Javascript non siano associati ad esso).

È un modo di eseguire Javascript invece di seguire un collegamento:

<a href="Javascript: doStuff();">link</a>

Quando in realtà non esiste javascript da eseguire (come il tuo esempio) non fa nulla.


Ah, capisco. Disabilita efficacemente il collegamento.
John Livermore,

9

Fare riferimento a questo:

<a href="Http://WWW.stackoverflow.com">Link to the website opened in different tab</a>
<a href="#MyDive">Link to the div in the page(look at the chaneged url)</a>
<a href="javascript:;">Nothing happens if there is no javaScript to render</a>

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

javascript: dice al browser che sta per scrivere il codice javascript


3

Vecchio thread, ma ho pensato di aggiungere che il motivo per cui gli sviluppatori utilizzano questo costrutto non è quello di creare un collegamento non funzionante, ma perché gli URL javascript per qualche motivo non passano correttamente i riferimenti all'elemento html attivo.

eg handler_function(this.id)funziona come onClickma non come un URL javascript.

Quindi è una scelta tra scrivere codice pedanticamente conforme agli standard che ti coinvolge nel dover regolare manualmente la chiamata per ogni collegamento ipertestuale o un codice leggermente non standard che può essere scritto una volta e utilizzato ovunque.


2

Quindi è usato per scrivere codici js all'interno hrefinvece che come ascoltatori di eventi, come onclicked evitare# collegamenti hrefper rendere i atag validi per HTML.

Ho fatto una ricerca su come usare javascript:all'interno dihref attributo.

<a href="
     javascript:
        a = 4;
        console.log(a++); 
        a += 2; 
        console.log(a++); 
        if(a < 6){ 
            console.log('a is lower than 6');
        } 
        else 
            console.log('a is greater than 6');
        function log(s){
            console.log(s);
        }
        log('function inplimentation working too');

">Click here</a>

Attraverso questo codice, puoi persino scrivere codici js lì invece di chiamare solo funzioni.


Testato in versione cromata 68.0.3440.106 (build ufficiale) (64 bit)

Testato in Firefox Quantom 61.0.1 (64 bit)


-4

Il modo migliore per rendere sempre correttamente un collegamento è con il CSS come segue:

a {cursor: pointer !important}

Si dovrebbe evitare di seguire cose non necessarie come menzionate nel thread.

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.