2010-09-17 22 views
12

Desde mi experiencia sé tres maneras diferentes para ejecutar una función de JavaScript cuando un usuario hace clic en un enlace¿Cuál es la mejor forma de ejecutar una función cuando el usuario hace clic en un enlace?

  1. utilizar el atributo onclick en el enlace

    <a href="#" onclick="myfunction();return false;">click me</a> 
    
  2. Uso del href en el enlace

    <a href="javascript:myfunction();">click me</a> 
    
  3. No toque el enlace, haga todo lo posible en js

    <a href="#">click me</a> 
    

    (Javascript en el que se detendrá el evento predeterminado, y llamar a la función)

cuál es mejor? ¿Cuáles son las ventajas y desventajas?

EDITAR elimina el "javascript:" en onclick

+0

no diga "javascript:" en onclick. Eso introduce una etiqueta (para 'break',' continue') que no necesita. – Thilo

+3

Generalmente no se aconseja no tocar el HTML * en absoluto *, como lo pones en el ejemplo 3, ya que será problemático cuando intentes adjuntar el controlador de eventos en Javascript si no hay forma de seleccionar el elemento correcto. –

+0

Incluso cuando lleva a cabo el enfoque 3, use un 'href' que hace algo para usuarios que no sean javascript. Si se trata de una acción que no tiene sentido para usuarios que no sean javascript, entonces podría usar javascript para * generar * el enlace - de esa manera las únicas personas que lo verían son las personas que podrían usarlo – Gareth

Respuesta

8

Unobtrusive Javascript (su tercer ejemplo) con graceful degredation es la mejor opción.

+0

Es lo mismo que con los estilos de CSS: no use style = "" dentro del html, use los selectores para el estilo genérico de la página y externalice el css. – sod

+0

pero el tercero a veces significa que debe proporcionar una identificación en el enlace, por lo que podría terminar con varios identificadores en su Html. Y su código JS se pone feo cuando tiene muchos enlaces diferentes con diferentes funciones. – pleasedontbelong

+0

No necesariamente, me complace. Puede recorrer por el índice del elemento dentro del DOM. O puede usar la delegación de eventos y manejar el clic según el nombre de clase, el valor href, etc. – Kevin

0

O, alternativamente, usar jQuery

$(function() { 
    $('[id$=myLinkID]').click(function(e) { 
     myFunction(); 
    }); 
}); 
+0

esa es la tercera opción = P, ya sea usando JQuery, mootools, prototipo o js nativo – pleasedontbelong

3

Siempre es bueno tener un enlace en el atributo href con el fin de apoyar a los usuarios que tienen JavaScript desactivado en su navegador.

<a href="http://www.mywebsite.com/javascriptdisabled.html" onclick="myfunction(); return false;">click me</a> 
+0

+1 ventaja ... pero tiene su lado negativo, necesitas detener el evento usando "return false", no es gran cosa pero un "pelo en la sopa" – pleasedontbelong

+0

'return false' detiene el enlace y la página 'salta', no puede evitarlo si está escribiendo JS en línea (hasta donde yo sé) - ¿Hay alguna razón particular por la que no debe ser utilizado además del hecho de que es feo –

+0

nop, no hay otra razón además de eso. pero es bueno tener en cuenta que si llama a la función desde el interior del href, no necesitará que el resultado sea falso, pero tendrá problemas con los navegadores que no son compatibles con JS, y un día todos los navegadores admitirán JS Ahora, en Chrome, ni siquiera es posible desactivar el código js ... así que supongo que en el futuro podríamos usar la segunda opción que parece más limpia (al menos para mí) – pleasedontbelong

1

Ninguno de los de arriba. Usar la click evento (asignado ya sea como un atributo o vía la escritura si se prefiere) y tienen una URL real como un retorno:

<a href="realpage.html" onclick="myfunction(); return false;">click me</a> 

o HTML:

<a href="realpage.html" id="myLink">click me</a> 

Guión:

document.getElementById("myLink").onclick = function() { 
    myfunction(); 
    return false; 
}; 

Además, no prefijo el código en los atributos del controlador de eventos con javascript:. Es incorrecto y solo no arroja un error por coincidencia (que es que en JavaScript, javascript: crea una etiqueta llamada javascript).

+0

gracias, he corregido la pregunta y eliminado el "javascript:" pero además de eso, no veo ninguna diferencia, lo que usted propuso es básicamente la primera y la tercera opción. Pero como comentó @Yi Jiang, puede tener problemas si no hay una identificación "mylink" en la página (por ejemplo, un enlace que se genera dinámicamente) ... al final, todo depende de lo que necesite hacer – pleasedontbelong

+0

Hay una gran diferencia: el mío realmente hace algo cuando haces clic en el enlace con JavaScript desactivado. –

+0

ahhh hablando de "realpage.html": P bueno, sí, hace algo cuando no hay JS. Pero esa no era mi pregunta. Quería explorar las ventajas y desventajas de elegir uno de ellos – pleasedontbelong

Cuestiones relacionadas