2010-02-15 5 views

Répondre

4

L'utilisation du mot-clé javascript: dans un lien n'est de toute façon pas recommandée. Je n'ai réussi à trouver un article sur la raison pour laquelle il pourrait être dangereux:

a href=”javascript:void(0);” — avoid the void

Mais le consensus général montre que vous ne devriez pas l'utiliser car il pourrait confondre les navigateurs sans javascript soutien, pour certaines personnes navigateurs, il pourrait être analysé comme un lien invalide. Au lieu de cela, vous devez fournir un lien vers une page, soit en travaillant sur les fonctionnalités qui seraient fournies par javascript, soit en affichant un message sur le site nécessitant le javascript pour fonctionner correctement. Sur le même lien, return false; de votre événement, comme ceci:

<a href="noscript.html" onclick="doSomething(); return false;">I'm a link</a> 

Ou bien, utilisez return false; ou preventDefault() et returnValue dans votre code javascript:

element.onclick = function() 
{ 
    /* 
     // return false is better for most situations (see bobince's comment) 
     if (event.preventDefault) 
      event.preventDefault(); 
     else 
      event.returnValue = false; 
    */ 

    doSomething(); 

    return false; 
} 
+0

Merci pour ce Andy. Je connais les problèmes associés aux clics et j'ai jeté un coup d'œil sur le blog que vous avez mentionné. Mais, je n'ai pas trouvé même une seule explication valable pour pourquoi javascript: void (0) est considéré comme nuisible (en supposant que nous faisons tout le faux retour et de telles choses). – Abhi

+0

@Abhi: Cet article de blog suggère que les images disparaissent lorsqu'elles sont enveloppées avec un lien 'void (0)' dans IE, je ne peux pas dire que je l'ai moi-même vécu. Au-delà de cela, je ne suis pas sûr que «void» soit vraiment nuisible. –

+2

Moi non plus, je ne pense pas que ce problème, quel qu'il soit, était lié à 'void'. Cependant, ne jamais utiliser les liens 'javascript:' est de toute façon un bon conseil. Si vous utilisez des gestionnaires d'événements assignés par JavaScript plutôt que des attributs 'onclick =" ... "' (et c'est en général la meilleure approche), utiliser 'return false' est de loin la réponse la plus simple car cela fonctionnera sur IE et d'autres navigateurs sans avoir besoin de l'objet événement du tout. L'exemple ci-dessus n'a pas 'cancelBubble' sur IE, et ne fonctionne pas sur les autres navigateurs en raison de l'absence de paramètre' event' (le 'event' global est IE-only). – bobince

1

Cliquez sur <a href="javascript:void(0)" /> déclenche l'événement "beforeunload" dans objet "fenêtre" IE (j'ai testé dans IE10), mais cliquez sur <a href="#" /> n'a pas.

+0

IE 11 ne déclenche plus onbeforeunload lorsque ce lien a cliqué. – tsh

Questions connexes