Quiero ejecutar una función de JavaScript simple con un clic sin ninguna redirección.
¿Hay alguna diferencia o beneficio entre poner la llamada de JavaScript en el href
atributo (como este:
<a href="javascript:my_function();window.print();">....</a>
) vs. ponerlo en el onclick
atributo (vincularlo al onclick
evento)?
javascript
href
SkunkSpinner
fuente
fuente
Respuestas:
Poner el onclick dentro del href ofendería a aquellos que creen firmemente en la separación del contenido del comportamiento / acción. El argumento es que su contenido html debe permanecer enfocado únicamente en el contenido, no en la presentación o el comportamiento.
La ruta típica en estos días es usar una biblioteca javascript (por ejemplo, jquery) y crear un controlador de eventos usando esa biblioteca. Se vería algo así como:
fuente
href
línea versus en líneaonclick
? Asumiendo que ibas a ponerlo en línea por alguna razón, ¿cuál deberías usar? (En la práctica, haría lo que me sugirió, pero parece que se ha saltado la diferencia entre los dos atributos)malo:
bueno:
mejor:
aún mejor 1:
aún mejor 2:
¿Por qué mejor? porque
return false
evitará que el navegador siga el enlacemejor:
Use jQuery u otro marco similar para adjuntar el controlador onclick por ID de elemento.
fuente
href
no se establece#
sino en un enlace real para los navegadores noJS.En términos de javascript , una diferencia es que la
this
palabra clave en elonclick
controlador se referirá al elemento DOM cuyoonclick
atributo es (en este caso, el<a>
elemento), mientras quethis
en elhref
atributo se referirá awindow
objeto.En términos de presentación , si un
href
atributo está ausente de un enlace (es decir<a onclick="[...]">
), por defecto, los navegadores mostrarán eltext
cursor (y no elpointer
cursor deseado a menudo ) ya que está tratando el<a>
como un ancla, y no como un enlace.En términos de comportamiento , al especificar una acción mediante la navegación a través de
href
, el navegador normalmente admitirá abrirlahref
en una ventana separada utilizando un acceso directo o un menú contextual. Esto no es posible cuando se especifica una acción solo a través deonclick
.Sin embargo, si está preguntando cuál es la mejor manera de obtener una acción dinámica con el clic de un objeto DOM, entonces adjuntar un evento usando javascript separado del contenido del documento es la mejor manera de hacerlo. Podrías hacer esto de varias maneras. Una forma común es usar una biblioteca javascript como jQuery para vincular un evento:
fuente
yo suelo
Un largo camino pero hace el trabajo. usa un estilo A para simplificar y luego se convierte en:
fuente
nohref
atributos antes. Esta es la forma más lógica / elegante de manejar tales acciones de JavaScript. Esto es compatible con FF12 e IE8. Por lo tanto, reemplazaré todo mihref="JavaScript:void(0);"
pornohref
. Muchas gracias. Salud.nohref
es parte de laarea
etiqueta, noa
! Su ejemplo es el mismo que<a onClick="alert('Hello World')">HERE</a>
nohref
no existe en unaa
etiqueta.Además de todo lo aquí, el href se muestra en la barra de estado del navegador, y no haga clic en. Creo que no es fácil de usar mostrar código JavaScript allí.
fuente
La mejor manera de hacerlo es con:
El problema es que esto agregará un hash (#) al final de la URL de la página en el navegador, lo que requiere que el usuario haga clic en el botón Atrás dos veces para ir a la página anterior a la suya. Teniendo esto en cuenta, debe agregar algo de código para detener la propagación de eventos. La mayoría de los kits de herramientas de JavaScript ya tendrán una función para esto. Por ejemplo, el kit de herramientas dojo usa
para hacerlo
fuente
href="#"
el navegador buscará una etiqueta de anclaje con nombre y, dado que no la encuentra, hará que la ventana se desplace hacia la parte superior de la página, algo que podría no ser notable si ya estás en la cima. Para evitar este comportamiento, utilice: en suhref="javascript:;"
lugar.La respuesta principal es una muy mala práctica, nunca se debe vincular a un hash vacío, ya que puede crear problemas en el futuro.
Sin embargo, lo mejor es vincular un controlador de eventos al elemento como lo han declarado muchas otras personas,
<a href="javascript:doStuff();">do stuff</a>
funciona perfectamente en todos los navegadores modernos, y lo uso ampliamente cuando renderizo plantillas para evitar tener que volver a vincular para cada instancia. En algunos casos, este enfoque ofrece un mejor rendimiento. YMMVOtro tid-bit interesante ...
onclick
&href
tener comportamientos diferentes al llamar a JavaScript directamente.onclick
pasará elthis
contexto correctamente, mientrashref
que no lo hará, o en otras palabras<a href="javascript:doStuff(this)">no context</a>
, no funcionará, mientras que<a onclick="javascript:doStuff(this)">no context</a>
hará.Sí, omití el
href
. Si bien eso no sigue las especificaciones, funcionará en todos los navegadores, aunque, idealmente, debería incluir unahref="javascript:void(0);"
buena medidafuente
Teniendo
javascript:
un atributo que no sea específicamente para secuencias de comandos es un método obsoleto de HTML. Si bien técnicamente funciona, todavía está asignando propiedades de JavaScript a un atributo que no es un script, lo cual no es una buena práctica. Incluso puede fallar en los navegadores antiguos, o incluso en algunos modernos (una publicación en el foro de Google parece indicar que a Opera no le gustan las URL 'javascript:').Una mejor práctica sería la segunda forma, poner su javascript en el
onclick
atributo, que se ignora si no hay funcionalidad de scripting disponible. Coloque una URL válida en el campo href (comúnmente '#') para los que no tienen javascript.fuente
funcionó para mí usando esta línea de código:
fuente
Esto funciona
fuente
Personalmente, encuentro molesto poner llamadas de JavaScript en la etiqueta HREF. Por lo general, realmente no presto atención a si algo es o no un enlace de JavaScript o no, y muchas veces quiero abrir cosas en una nueva ventana. Cuando trato de hacer esto con uno de estos tipos de enlaces, aparece una página en blanco sin nada y JavaScript en mi barra de ubicación. Sin embargo, esto se evita un poco al usar un onlick.
fuente
Una cosa más que noté al usar "href" con javascript:
El script en el atributo "href" no se ejecutará si la diferencia de tiempo entre 2 clics fue bastante corta.
Por ejemplo, intente ejecutar el siguiente ejemplo y haga doble clic (¡rápido!) En cada enlace. El primer enlace se ejecutará solo una vez. El segundo enlace se ejecutará dos veces.
Reproducido en Chrome (doble clic) e IE11 (con triple clic). En Chrome, si hace clic lo suficientemente rápido, puede hacer 10 clics y tener solo 1 función de ejecución.
Firefox funciona bien.
fuente
Primero, tener la URL
href
es mejor porque permite a los usuarios copiar enlaces, abrirlos en otra pestaña, etc.En algunos casos (por ejemplo, sitios con cambios frecuentes de HTML) no es práctico vincular enlaces cada vez que hay una actualización.
Método de enlace típico
Enlace normal:
Y algo así para JS:
Los beneficios de este método son la separación limpia de marcado y comportamiento y no tiene que repetir las llamadas a funciones en cada enlace.
Método sin enlace
Sin embargo, si no desea vincular cada vez, puede usar onclick y pasar el elemento y el evento, por ejemplo:
Y esto para JS:
El beneficio de este método es que puede cargar nuevos enlaces (por ejemplo, a través de AJAX) siempre que lo desee sin tener que preocuparse por el enlace cada vez.
fuente
fuente
Experimenté que el javascript: hrefs no funcionaba cuando la página estaba incrustada en la función de página web de Outlook donde una carpeta de correo está configurada para mostrar una url
fuente