2011-07-22 10 views
13

Pregunta rápida.Javascript y etiquetas de anclaje, ¿práctica recomendada?

¿Deberíamos poner Javascript en el HREF o usar onClick (evento)?

¿Hay algún pros/contra para usar cualquiera de los dos. En lo personal creo que es más fácil/más limpio para simplemente poner el código en el href, y no tener que volver falsa o preocuparse acerca del salto a #

¿Hay problemas específicos del navegador conocido con cada método ...

Ejemplos:

<a href="javascript: alert('foo!');">Click Me</a> 
<a href="#" onClick="alert('foo!');return false">Click Me</a> 
<a href="javascript:void(0)" onclick="alert('foo!');">Click Me</a> 
+2

Usted debe exteriorizar código javascript. Escuche el evento de clic de la etiqueta a – chchrist

Respuesta

11

1) En lugar utilizar onclick. Asegúrese de tener una URL de reserva racional en href cuando JS no está permitido.

2) En lugar de onclick="...", debe usar el controlador de eventos. Encuentra elementos usando jQuery o XPath, y luego para cada uno, llama al element.addEventListener().

element.addEventListener("click", function() { alert("bar"); }, false); 

O la manera antigua ...

element.onclick = function() { alert("foo"); }; 
0

En general, me gustaría externalizar JavaScript pero el uso de la href llamarlo:

<a href="javascript:foo('bar!');">Click Me</a>

Aunque creo que su rápida alert ejemplo, está bien como una excepción a la regla.

Sin embargo, si el uso de una biblioteca como jQuery JS puede asignar, por supuesto, eventos directamente - ver el primer ejemplo de jQuery tutorial que se ve en el elemento de anclaje http://docs.jquery.com/Tutorials:How_jQuery_Works

8

Mantener el código HTML independiente de la OMI es más limpio.

<a id="foo" href="#">Click Me</a> 

Luego, en la cabeza o el archivo js separado:

document.getElementByID("foo").onclick = function() { alert("hi"); } 
4

yo personalmente no poner el código JavaScript en el HTML. Debería usar un detector de eventos que se activará cuando se haga clic en <a>.

<a href="#" id="linkA">Click Me</a> 

Y luego:

document.getElementById('linkA').addEventListener('click', function(e){ 
    e.preventDefault(); // Prevents page from scrolling to the top 
    alert('foo!'); 
}); 
+0

cosas interesantes en el método .preventDefault. ¿Esto generalmente se considera mejor que devolver falso al final del código en línea? –

+0

@thesocalhacker: Por lo general, se prefiere hacerlo de esta manera (con controladores de eventos, no con código en línea). Desea mantener su JavaScript separado de su HTML, así que sí, se prefiere 'e.preventDefault();' (en comparación con devolver el código falso en línea). –

Cuestiones relacionadas