68 votes

href = "javascript:" vs href = "javascript: void (0)"

Notre application web est rendu complètement sur le navigateur.
Le serveur parle seulement au navigateur via JSON de messagerie.

En conséquence, nous avons seulement besoin d'une seule page pour l'application et surtout tous les <a> balises n'ont pas un réel href pointant vers d'autres pages.

Dans ma quête de la suppression de choses inutiles, je me demandais si je peux me débarrasser de la zillions d' void(0) nous avons dans notre code, comme ils semblent inutiles:

<a onclick="fn()">Does not appear as a link, because there's no href</a>
<a href="javascript:void(0)" onclick="fn()">fn is called</a>
<a href="javascript:" onclick="fn()">fn is called too!</a>

Quelqu'un sait si à l'aide d' href="javascript:" peut causer un problème?
Il fonctionne même sur IE7...

S'il vous plaît ne passez pas votre précieux temps de me dire à javascript en ligne est mauvaise :)

52voto

balexandre Points 36115

Il ne cause pas de problèmes, mais c'est un truc pour faire la même chose que PreventDefault

lorsque vous êtes en bas de la page et un point d'ancrage comme:

<a href="#" onclick="fn()">click here</a>

vous sautez vers le haut et l'URL sera le point d'ancrage # ainsi, pour éviter cela, nous avons simplement return false; ou utiliser javascript:void(0);

quant à vos exemples

<a onclick="fn()">Does not appear as a link, because there's no href</a>

il suffit de ne a {text:decoration:underline;} et vous obtiendrez un "lien un-like"

<a href="javascript:void(0)" onclick="fn()">fn is called</a>
<a href="javascript:" onclick="fn()">fn is called too!</a>

c'est ok, mais dans votre function à la fin, juste return false; afin de prévenir le comportement par défaut, vous n'avez pas besoin de faire quelque chose de plus.

25voto

Andy E Points 132925

Lors de l'utilisation d' javascript: dans la navigation, la valeur de retour de l'exécution du script, si il y en a un, devient le contenu d'un nouveau document qui est affiché dans le navigateur. L' void opérateur en JavaScript entraîne le retour de la valeur de l'expression qui suit le retour d' indéfini, ce qui empêche cette action se produise. Vous pouvez essayer vous-même, copiez le texte suivant dans la barre d'adresse et appuyez sur entrée:

javascript:"hello"

Le résultat est une nouvelle page avec le mot "bonjour". Maintenant le modifier:

javascript:void "hello"

...rien ne se passe.

Lorsque vous écrivez javascript: sur son propre il n'y a pas de script en cours d'exécution, de sorte que le résultat de l'exécution du script est également pas défini, de sorte que le navigateur ne fait rien. Cela rend le suivant plus ou moins l'équivalent:

javascript:undefined;
javascript:void 0;
javascript:

Avec l'exception que indéfini peut être remplacée par la déclaration d'une variable avec le même nom. L'utilisation d' void 0 est généralement inutile, et c'est essentiellement été réduit de void functionThatReturnsSomething().

Comme d'autres l'ont mentionné, il est encore mieux d'utiliser return false; dans le gestionnaire de clic que d'utiliser l' javascript: protocole.

12voto

brookslee Points 136

L'utilisation de 'javascript: void 0' causera un problème dans IE

lorsque vous cliquez sur le lien, il se déclenchera lors de l' évènement de la fenêtre!

 <!doctype html>
<html>
<head>
</head>
<body>
<a href="javascript:void(0);" >Click me!</a>
<script>
window.onbeforeunload = function() {
    alert( 'oops!' );
};
</script>
</body>
</html>
 

8voto

Tanguy Points 136

Cette méthode semble correcte dans tous les navigateurs, si vous définissez le onclick avec un événement jQuery:

 <a href="javascript:;">Click me!</a>
 

Comme indiqué précédemment, href = "#" avec modification du hachage d'URL et peut déclencher le ré / chargement des données si vous utilisez un plugin JS Historique (ou ba-bbq).

3voto

Moin Zaman Points 15424

vous pourriez tous les faire # .

Vous devrez ensuite ajouter return false; à la fin de toute fonction appelée en cliquant sur l'ancre pour ne pas faire sauter la page en haut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X