web-dev-qa-db-fra.com

Lien d'ancrage HTML - href et onclick les deux?

Je veux créer une balise d'ancrage qui exécute du JavaScript et qui continue ensuite où que href le prenne. L'appel d'une fonction qui exécute mon code JavaScript, puis définit window.location Ou top.location Sur l'emplacement href ne fonctionne pas pour moi.

Alors, imaginez que j’ai un élément avec l’identifiant "Foo" sur la page. Je veux créer une ancre similaire à:

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a>

Lorsque cela est cliqué, je veux exécuter runMyFunction, puis passer à la page à #Foo (Ne pas provoquer de rechargement - utiliser top.location Provoquerait le rechargement de la page).

Suggestions? Je suis heureux d'utiliser jQuery s'il peut aider ici ...

82
psychotik

Juste return true au lieu?

La valeur renvoyée par le code onClick détermine si l'action cliquée inhérente au lien est traitée ou non. Le renvoi de false signifie qu'il n'est pas traité, mais si vous renvoyez true puis le navigateur procédera au traitement après le retour de votre fonction et passera à l'ancre appropriée.

122
Amber
<a href="#Foo" onclick="return runMyFunction();">Do it!</a>

et

function runMyFunction() {
  //code
  return true;
}

De cette façon, vous aurez la fonction youf exécutée ET vous suivrez le lien ET vous suivrez le lien exactement après que votre fonction a été exécutée avec succès.

28
n1313

Si le lien ne change que l'emplacement si la fonction est exécutée avec succès, alors faites onclick="return runMyFunction();" et vous renverriez true ou false dans la fonction.

Si vous souhaitez simplement exécuter la fonction et laisser ensuite la balise d'ancrage faire son travail, supprimez simplement le return false déclaration.

En guise de remarque, vous devriez probablement utiliser un gestionnaire d'événements à la place, car JS en ligne n'est pas une façon très optimale de procéder.

7
peirix