Considérez les points suivants:
<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>
<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>
<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />
Le premier lien échange les valeurs des champs de texte. Le deuxième lien ouvrira une nouvelle page avec le texte "un poisson". Si vous utilisez un javascript: link
, la minute d'une expression renvoie autre chose que de l' null
ou undefined
, le navigateur va interpréter cela comme ce que le lien devrait le faire. En les enveloppant de toutes les expressions/relevés en void()
fonction, vous assurez l'ensemble de votre extrait de code sera exécuté. Ces jours-ci, il s'agit principalement de l'utilisation de Favoris, comme à l'aide d'un onclick
d'attribut, ou la mise en place de gestionnaires d'événements dans séparent les blocs Javascript/fichiers est la "norme".
Comme pour javascript:
vs javascript:void()
, la première phrase est ambiguë. Vous êtes en train de dire, "hé, je veux exécuter javascript", mais alors vous n'avez pas de code. Ce n'est pas forcément clair que le navigateur doit se faire ici. Avec la deuxième déclaration, vous dites "hey, exécuter javascript", et votre code renvoie finalement pas défini, le navigateur sait, signifie "ne rien faire".
Depuis que je suis ici, je vais aussi souligner que l'utilisation soit javascript:
ou javascript:void();
est tombé hors de la faveur avec la plupart des gens qui se soucient de balisage. La meilleure chose à faire est d'avoir votre gestionnaire onclick return false, et avoir le lien pointait vers une page ou de la ressource qui fait sens pour les gens qui ont le javascript désactivé, ou à l'aide d'un javascript bloqueur comme NoScript.