Come utilizzare un collegamento per chiamare JavaScript?


166

Come utilizzare un collegamento per chiamare il codice JavaScript?

Risposte:


192
<a onclick="jsfunction()" href="#">

o

<a onclick="jsfunction()" href="javascript:void(0);">

Modificare:

La risposta di cui sopra non è davvero una buona soluzione, avendo imparato molto su JS da quando ho pubblicato inizialmente. Vedere la risposta di EndangeredMassa di seguito per l'approccio migliore alla risoluzione di questo problema.


11
Consiglierei il secondo, poiché il primo ti fa scorrere in cima alla pagina.
Matt Grande,

7
Sì, lo farà sicuramente, a meno che non si aggiunga un "return false;" dopo la tua funzione.
Chelsea,

26
Questo è il codice del 1998. Utilizzare una delle soluzioni discrete. Per favore.
Andrew Hedges,

7
Non usare nessuno! I collegamenti servono per il collegamento, non sono elementi fittizi per chiamare javascript.
I.devries

4
se hai intenzione di mettere javascript in linea, fallo in questo modo: <a onclick="jsfunction;return false" href="linkasnormal">
Fire Crow,

201

JavaScript discreto, nessuna dipendenza dalla libreria:

<html>
<head>
    <script type="text/javascript">

        // Wait for the page to load first
        window.onload = function() {

          //Get a reference to the link on the page
          // with an id of "mylink"
          var a = document.getElementById("mylink");

          //Set code to run when the link is clicked
          // by assigning a function to "onclick"
          a.onclick = function() {

            // Your code here...

            //If you don't want the link to actually 
            // redirect the browser to another page,
            // "google.com" in our example here, then
            // return false at the end of this block.
            // Note that this also prevents event bubbling,
            // which is probably what we want here, but won't 
            // always be the case.
            return false;
          }
        }
    </script>
</head>
<body>
    <a id="mylink" href="http://www.google.com">linky</a>        
</body>
</html>

26
Puoi spiegare perché questo è meglio della risposta attualmente accettata e dove lo script dovrebbe andare nella pagina (perché questa è chiaramente una domanda a livello di principiante)?
Bill the Lizard,

8
Cosa certa. Aggiornato.
estinzioneMassa,

6
Quindi cosa devo inserire hrefse non voglio reindirizzare l'utente e voglio solo eseguire un po 'di codice? Edit: vedo che può essere vuoto a sinistra: href="".
SabreWolfy,

6
Perché è meglio aggiungere l' onclickevento tramite window.onload, anziché inserire onclickdirettamente il <a>tag?
Nathan Reed,

10
Che cosa succede se una delle tue preoccupazioni è che non vuoi separare la tua unità di lavoro funzionale in diversi luoghi fisici nel tuo file di origine, o diffondere su molti file di origine. Se inserisci una chiamata javascript nel tuo tag a href, è dolorosamente chiaro guardando una riga cosa sta succedendo. Sarei preoccupato di separare quella funzionalità in diversi luoghi fisici in cui è più difficile avere un quadro di ciò che sta accadendo. Forse è solo il mio stile.
stu,

47
<a href="javascript:alert('Hello!');">Clicky</a>

EDIT, anni dopo: NO! Non farlo mai! Ero giovane e stupido!

Modifica, di nuovo: un paio di persone hanno chiesto perché non dovresti farlo. Ci sono un paio di motivi:

  1. Presentazione: HTML dovrebbe concentrarsi sulla presentazione. Inserire JS in un HREF significa che il tuo HTML ora, in un certo senso, ha a che fare con la logica aziendale.

  2. Sicurezza: Javascript nel tuo HTML in questo modo viola le norme sulla sicurezza dei contenuti (CSP) . Content Security Policy (CSP) è un ulteriore livello di sicurezza che aiuta a rilevare e mitigare determinati tipi di attacchi, tra cui Cross-Site Scripting (XSS) e attacchi di iniezione di dati. Questi attacchi vengono utilizzati per tutto, dal furto di dati alla defacement del sito o alla distribuzione di malware. Leggi di più qui .

  3. Accessibilità: i tag di ancoraggio servono per il collegamento ad altri documenti / pagine / risorse. Se il tuo link non va da nessuna parte, dovrebbe essere un pulsante . Ciò rende molto più facile per gli screen reader, i terminali braille, ecc. Determinare cosa sta succedendo e fornire agli utenti ipovedenti informazioni utili.


16
Forse qualche descrizione dei problemi con questo metodo? È peggio di href='#'e alert()dentro onclick?
Thomas Ahle,

3
Sono nuovo di JavaScript e non capisco cosa c'è che non va in questo .. Qualsiasi spiegazione sarebbe buona
nilanjanaLodh

1
Ciao, non sono sicuro del perché non usarlo? Sono bloccato in uno scenario in cui devo chiamare una funzione JS, ma tutto ciò che posso specificare è un collegamento. E la tua soluzione ha funzionato.
skapie19,

43

E, perché non discreto con jQuery:

  $(function() {
    $("#unobtrusive").click(function(e) {
      e.preventDefault(); // if desired...
      // other methods to call...
    });
  });

HTML

<a id="unobtrusive" href="http://jquery.com">jquery</a>

2
Funzionerà per SEO in modo tale che i crawler possano trovare il link e seguirlo?
Ahi Tuna

11
perché non tutti usano jquery.
stu,

1
@GregMiernicki Sì e no a seconda di cosa intendi per link. Guarda l'HTML. Un webcrawler o qualsiasi client con javascript disattivato visiterà l'HREF specificato. I client abilitati a Javascript eseguiranno l'azione clic e quindi seguiranno il collegamento se tale funzione non restituisce un valore falso o chiama preventDefault. In questo caso, l'href è un fallback, quindi perché si chiama "discreto"
Evan Langlois,

12

Javascript discreto presenta molti vantaggi, ecco i passaggi da seguire e perché è buono da usare.

  1. il collegamento si carica normalmente:

    <a id="DaLink" href="http://host/toAnewPage.html"> fai clic qui </a>

questo è importante perché funzionerà per i browser con javascript non abilitato o se c'è un errore nel codice javascript che non funziona.

  1. javascript viene eseguito al caricamento della pagina:

     window.onload = function(){
            document.getElementById("DaLink").onclick = function(){
                   if(funcitonToCall()){
                       // most important step in this whole process
                       return false;
                   }
            }
     }
  2. se il javascript viene eseguito correttamente, magari caricando il contenuto della pagina corrente con javascript, il ritorno false annulla l'attivazione del collegamento. in altre parole, mettere return false ha l'effetto di disabilitare il collegamento se il javascript è stato eseguito correttamente. Consentendo al contempo di eseguirlo se il javascript non lo fa, fare un bel backup in modo che il contenuto venga visualizzato in entrambi i modi, per i motori di ricerca e se il codice si rompe o viene visualizzato su un sistema non javascript.

il miglior libro sull'argomento è "Dom Scription" di Jeremy Keith


9

Oppure, se stai usando PrototypeJS

<script type="text/javascript>
  Event.observe( $('thelink'), 'click', function(event) {
      //do stuff

      Event.stop(event);
  }
</script>

<a href="#" id="thelink">This is the link</a>

1
Adoro non dover mettere in linea le funzioni di gestione degli eventi.
Mark Biek,

1
È l'unica strada da percorrere. Si prega di votare le risposte in linea. È una pratica per la quale non ci sono scuse in questi giorni.
Andrew Hedges,

5
@Andrew: per favore lascia un commento insieme al tuo downvote che spiega perché le risposte in linea sono cattive.
Bill the Lizard,

8

Penso che tu possa usare l' onclickevento, qualcosa del genere:

<a onclick="jsFunction();">

0

basato sull'uso della risposta @mister_lucky con jquery:

$('#unobtrusive').on('click',function (e) {
    e.preventDefault(); //optional
    //some code
});

Codice HTML:

<a id="unobtrusive" href="http://jquery.com">jquery</a>

-2

basta usare javascript: ---- esempio

javascript:var JFL_81371678974472 = new JotformFeedback({ formId: '81371678974472', base: 'https://form.jotform.me/', windowTitle: 'Photobook Series', background: '#e44c2a', fontColor: '#FFFFFF', type: 'false', height: 700, width: 500, openOnLoad: true })
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.