2009-08-28 6 views
70

Je veux créer une balise d'ancrage qui exécute du code JavaScript, puis continue à aller là où le href le prenait. L'appel d'une fonction qui exécute mon JavaScript, puis définit window.location ou top.location à l'emplacement href ne fonctionne pas pour moi. Donc, imaginez que j'ai un élément avec l'identifiant "Foo" sur la page. Je veux à l'auteur d'une ancre semblable à:Lien d'ancre HTML - href et onclick les deux?

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

Lorsque cela est cliqué, je veux exécuter runMyFunction puis sauter la page à #Foo (pas provoquer un rechargement - en utilisant top.location amèneraient pour recharger la page).

Suggestions? Je suis heureux d'utiliser jQuery si cela peut aider ici ...

+0

'return true;' est la solution, mais vous pouvez aussi appeler 'location.hash = '# Foo''. Cela ne rechargera pas la page. – shuangwhywhy

Répondre

110

Juste return true à la place?

La valeur de retour à partir du code onClick est ce qui détermine si est traitée ou non l'action cliquée inhérente du lien - retour false signifie qu'il est pas traité, mais si vous revenez true le navigateur procédera à la traiter après votre La fonction retourne et va à l'ancre appropriée.

+0

Que faire si onclick ne renvoie rien? – maciek

+1

@maciek alors la valeur de retour est traitée comme 'non définie 'ce qui est considéré comme faux à ces fins. – Amber

+1

Dans le passé, chaque fois que j'utilisais une fonction js pour lancer une nouvelle page, et je mettais juste un "#" pour l'attribut href, je revenais "-1" pour empêcher l'action par défaut, qui est généralement le navigateur sautant en haut de la page, ou parfois je ne retournerais rien. Dernièrement j'ai dû réviser toutes ces pages comme @Amber a conseillé ... de renvoyer spécifiquement faux, si je ne veux pas que la page saute. – Randy

7

Si le lien doit uniquement changer l'emplacement si la fonction est exécutée avec succès, faites onclick="return runMyFunction();" et dans la fonction, vous obtiendrez true ou false.

Si vous souhaitez simplement exécuter la fonction, puis laisser le tag d'ancrage faire son travail, supprimez simplement l'instruction return false.

En guise de remarque, vous devriez probablement utiliser un gestionnaire d'événements à la place, car JS en ligne n'est pas une manière très optimale de faire les choses.

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

et

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

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

+0

Ne semble pas fonctionner si votre fonction renvoie true après un appel de fonction différé? – DavidVdd

Questions connexes