2010-12-08 12 views
26

Cuando quiero prevenir el comportamiento por defecto de la etiqueta de anclaje yo estoy usandoprevenir el comportamiento de anclaje

<a href="javascript:void(0);">link</a> 

¿Cuál es la solución más eficaz?

Respuesta

19

Un ejemplo de una solución con gracia degradantes:

<a href="no-script.html" id="myLink">link</a> 

<script> 
document.getElementById("myLink").onclick = function() { 
    // do things, and then 
    return false; 
}; 
</script> 

Demostración: http://jsfiddle.net/karim79/PkgWL/1/

+0

Esto también llevará al usuario a la página sin guiones si se produce un error en * hacer cosas * o si el usuario hace clic en el enlace antes de asignar el oyente. No es probable que esto último ocurra si realmente pretendes que se encuentren inmediatamente después del otro en el DOM, como en tu ejemplo, pero eso inhibiría la velocidad de renderizado de páginas, así como la validación de interrupciones (a menos que esto se cambie en las especificaciones de HTML5? ¡No me importaría si fuera así!) Por lo general, estas cosas se asignan en DOMReady lo más pronto posible, lo que en algunos casos puede dejar una ventana considerable para que el usuario haga clic en el enlace. –

10

Puede también tiene esto:

<a href="#" onclick="return false;">link</a> 
23

Este es un enfoque bien, si estás usando jQuery también se puede hacer:

<a id="link" href="javascript:void(0)">link</a> 

<script type="text/javascript"> 
    $("#link").click(function(ev) { 
     ev.preventDefault(); 
    }); 
</script> 

preventDefault puede ser útil también para evitar la presentación de formulario

9

Si no desea que el navegador siga el enlace en cualquier lugar, diría que lo que tiene es la solución más simple y segura.

Claro, hay un montón de otras soluciones se podría aplicar con javascript, pero la mayoría de otras maneras puede fallar cuando

  • El DOM no está completamente cargada, si el evento se asigna al domready o posterior, que es común.
  • Un detector de eventos de clic maneja el enlace (que es común donde los enlaces no deben ser seguidos por el navegador). Si se produce un error en el javascript que maneja el clic, el return false; o preventDefault que podría estar al final de la instrucción, no se ejecutará, y el navegador seguirá el enlace, aunque solo sea a #.
1

Aquí es muy fácil manera de detener esto.

(function($) { 
    $('a[href="#"]').click(function(e) { 
     e.preventDefault(); 
    }); 
})(jQuery); 
Cuestiones relacionadas