Comment utiliser un lien pour appeler JavaScript?


166

Comment utiliser un lien pour appeler du code JavaScript?

Réponses:


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

ou

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

Éditer:

La réponse ci-dessus n'est vraiment pas une bonne solution, ayant beaucoup appris sur JS depuis que j'ai initialement publié. Voir la réponse d'EndangeredMassa ci-dessous pour la meilleure approche pour résoudre ce problème.


11
Je recommanderais le second, car le premier vous fait défiler vers le haut de la page.
Matt Grande

7
Oui, c'est certainement le cas, sauf si vous ajoutez un "return false;" après votre fonction.
Chelsea

26
C'est le code de 1998. Utilisez l'une des solutions discrètes. S'il vous plaît.
Andrew Hedges

7
N'utilisez ni l'un ni l'autre! Les liens servent à créer des liens, ce ne sont pas des éléments factices à appeler javascript.
I.devries

4
si vous allez mettre javascript en ligne, faites-le de cette façon: <a onclick="jsfunction;return false" href="linkasnormal">
Fire Crow

201

JavaScript discret, aucune dépendance de bibliothèque:

<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
Pouvez-vous expliquer pourquoi c'est mieux que la réponse actuellement acceptée, et où le script devrait aller dans la page (car il s'agit clairement d'une question de niveau débutant)?
Bill the Lizard

8
Chose sûre. Actualisé.
EndangeredMassa

6
Alors, que dois-je mettre hrefsi je ne veux pas rediriger l'utilisateur et que je veux juste exécuter du code? Edit: Je vois qu'il peut être laissé vide: href="".
SabreWolfy

6
Pourquoi est-il préférable d'ajouter l' onclickévénement via window.onloadplutôt que de le placer onclickdirectement dans la <a>balise?
Nathan Reed

10
Que faire si l'une de vos préoccupations est que vous ne souhaitez pas séparer votre unité fonctionnelle de travail en différents emplacements physiques dans votre fichier source, ou répartir sur de nombreux fichiers source. Si vous mettez un appel javascript dans votre balise a href, il est douloureusement clair en regardant une ligne ce qui se passe. Je serais préoccupé par la séparation de cette fonctionnalité en différents endroits physiques où il est plus difficile d'avoir une image de ce qui se passe. C'est peut-être juste mon style.
STU

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

EDIT, des années plus tard: NON! Ne fais jamais ça! J'étais jeune et stupide!

Edit, encore une fois: quelques personnes ont demandé pourquoi vous ne devriez pas faire cela. Il y a plusieurs raisons:

  1. Présentation: HTML doit se concentrer sur la présentation. Mettre JS dans un HREF signifie que votre HTML traite maintenant, en quelque sorte, de la logique métier.

  2. Sécurité: Javascript dans votre HTML enfreint la politique de sécurité du contenu (CSP) . La stratégie de sécurité du contenu (CSP) est une couche de sécurité supplémentaire qui permet de détecter et d'atténuer certains types d'attaques, notamment les attaques par script intersite (XSS) et par injection de données. Ces attaques sont utilisées pour tout, du vol de données à la dégradation du site ou à la distribution de logiciels malveillants. En savoir plus ici .

  3. Accessibilité: les balises d'ancrage permettent de créer des liens vers d'autres documents / pages / ressources. Si votre lien ne va nulle part, ce devrait être un bouton . Cela permet aux lecteurs d'écran, aux terminaux braille, etc., de déterminer plus facilement ce qui se passe et de fournir aux utilisateurs malvoyants des informations utiles.


16
Peut-être une description des problèmes avec cette méthode? Est-ce pire que href='#'et alert()dans onclick?
Thomas Ahle

3
Je suis nouveau en javascript et je ne comprends pas ce qui ne va pas avec ça .. Toute explication serait bien
nilanjanaLodh

1
Salut, je ne sais pas non plus pourquoi ne pas l'utiliser? Je suis coincé dans un scénario où je dois appeler une fonction JS, mais tout ce que je peux spécifier est un lien. Et votre solution a fonctionné.
skapie19

43

Et pourquoi pas discret avec 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
Cela fonctionnera-t-il pour le référencement de sorte que les robots d'exploration trouvent le lien et le suivent?
Ahi Tuna

11
car tout le monde n'utilise pas jquery.
STU

1
@GregMiernicki Oui et non selon ce que vous entendez par lien. Regardez le HTML. Un webcrawler ou tout client avec javascript désactivé visitera le HREF donné. Les clients Javascript activés exécuteront l'action de clic et ALORS suivront le lien si cette fonction ne renvoie pas une valeur fausse ou n'appelle pas preventDefault. Dans ce cas, le href est une solution de repli, d'où la raison pour laquelle on l'appelle "discrète"
Evan Langlois

12

Un Javascript discret présente de nombreux avantages, voici les étapes à suivre et pourquoi il est bon à utiliser.

  1. le lien se charge normalement:

    <a id="DaLink" href="http://host/toAnewPage.html"> cliquez ici </a>

ceci est important car cela fonctionnera pour les navigateurs avec javascript non activé, ou s'il y a une erreur dans le code javascript qui ne fonctionne pas.

  1. javascript s'exécute au chargement de la page:

     window.onload = function(){
            document.getElementById("DaLink").onclick = function(){
                   if(funcitonToCall()){
                       // most important step in this whole process
                       return false;
                   }
            }
     }
  2. si le javascript s'exécute avec succès, peut-être en chargeant le contenu de la page actuelle avec du javascript, le retour false annule le déclenchement du lien. en d'autres termes, mettre return false a pour effet de désactiver le lien si le javascript s'est exécuté avec succès. Tout en lui permettant de s'exécuter si le javascript ne fonctionne pas, faites une belle sauvegarde pour que votre contenu soit affiché dans les deux sens, pour les moteurs de recherche et si votre code se casse, ou est affiché sur un système non javascript.

le meilleur livre sur le sujet est "Dom Scription" de Jeremy Keith


9

Ou, si vous utilisez 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
J'aime ne pas avoir à mettre en ligne les fonctions de gestion des événements.
Mark Biek

1
C'est la seule voie à suivre. Veuillez voter pour les réponses en ligne. C'est une pratique pour laquelle il n'y a aucune excuse de nos jours.
Andrew Hedges

5
@Andrew: Veuillez laisser un commentaire avec votre vote négatif expliquant pourquoi les réponses en ligne sont mauvaises.
Bill the Lizard

8

Je pense que vous pouvez utiliser l' onclickévénement, quelque chose comme ceci:

<a onclick="jsFunction();">

0

basé sur l'utilisation de la réponse @mister_lucky avec jquery:

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

Code HTML:

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

-2

il suffit d'utiliser javascript: ---- exemplaire

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 })
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.