Pregunta ¿Qué significa "javascript: void (0)"?


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

He visto tal hrefs muchas veces, pero no sé exactamente qué significa eso.


1029
2017-08-18 05:20


origen


Respuestas:


los void el operador evalúa el dado   expresión y luego regresa undefined.

los void operador a menudo se utiliza meramente   para obtener el undefined primitivo   valor, generalmente usando "void(0)" (cual   es equivalente a "void 0"). En estos   casos, la variable global undefined   puede usarse en su lugar (suponiendo que tenga   no ha sido asignado a un no-predeterminado   valor).

Una explicación se proporciona aquí: void operador.

La razón por la que querrías hacer esto con el href de un enlace es que normalmente, un javascript: La URL redirigirá el navegador a una versión de texto sin formato del resultado de evaluar ese JavaScript. Pero si el resultado es undefined, entonces el navegador permanece en la misma página. void(0) es solo un guion corto y simple que evalúa undefined.


793
2017-08-18 05:23



Además de la respuesta técnica, javascript:void significa que el autor lo está haciendo mal.

No hay una buena razón para usar un javascript: pseudo-URL (*). En la práctica, provocará confusión o errores si alguien intenta cosas como 'enlace de marcador', 'abrir enlace en una pestaña nueva', y así sucesivamente. Esto sucede bastante ahora que las personas se han acostumbrado a hacer clic medio para nuevas pestañas: parece un enlace, quieres leerlo en una pestaña nueva, pero resulta que no es un enlace real en absoluto, y da resultados no deseados como una página en blanco o un error de JS cuando se hace clic en el medio.

<a href="#"> es una alternativa común que podría decirse que sería menos malo. Sin embargo debes recordar return false de tu onclick controlador de eventos para evitar que se siga el enlace y desplazarse hasta la parte superior de la página.

En algunos casos, puede haber un lugar real útil para señalar el enlace. Por ejemplo, si tiene un control, puede hacer clic en que se abre un archivo previamente oculto <div id="foo">, tiene sentido usar <a href="#foo"> para vincular a ella. O si hay una forma no JavaScript de hacer lo mismo (por ejemplo, 'thispage.php? Show = foo' que establece foo visible para comenzar), puede vincularse a eso.

De lo contrario, si un enlace apunta solo a algún script, no es realmente un enlace y no debe marcarse como tal. El enfoque habitual sería agregar el onclick a un <span>, <div>, o un <a> sin un href y ajústelo de alguna manera para dejar en claro que puede hacer clic en él. Esto es lo que StackOverflow [hizo al momento de escribir; ahora usa href="#"]

La desventaja de esto es que pierde el control del teclado, ya que no puede tabular en un span / div / bare-a o activarlo con espacio. Si esto es realmente una desventaja depende del tipo de acción que el elemento está destinado a tomar. Puede, con cierto esfuerzo, intentar imitar la interactividad del teclado agregando un tabIndex al elemento, y escuchar una pulsación de tecla de espacio. Pero nunca va a reproducir al 100% el comportamiento real del navegador, sobre todo porque los diferentes navegadores pueden responder al teclado de manera diferente (sin mencionar los navegadores no visuales).

Si realmente desea un elemento que no sea un enlace pero que se pueda activar normalmente con el mouse o el teclado, lo que desea es un <button type="button"> (o <input type="button"> es igual de bueno, para contenidos textuales simples). Siempre puede usar CSS para rediseñarlo, de modo que se parezca más a un enlace que a un botón, si lo desea. Pero dado que se comporta como un botón, así es como realmente debería marcarlo.

(*: en el sitio de autoría, de todos modos. Obviamente, son útiles para bookmarklets. javascript: Las pseudo-URL son una rareza conceptual: un localizador que no apunta a una ubicación, sino que llama al código activo dentro de la ubicación actual. Han causado enormes problemas de seguridad tanto para navegadores como para aplicaciones web, y nunca deberían haber sido inventados por Netscape.


368
2017-08-18 10:50



Significa que no hará nada. Es un intento de que el enlace no 'navegue' en ninguna parte. Pero no es el camino correcto.

En realidad deberías solo return false en el onclick evento, como ese:

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

Por lo general, se utiliza si el enlace está haciendo algo de 'JavaScript-y'. Como publicar un formulario AJAX, o intercambiar una imagen, o lo que sea. En ese caso, simplemente haces que cualquier función se llame return false.

Sin embargo, para que su sitio web sea completamente impresionante, generalmente incluirá un enlace que realice la misma acción, si la persona que lo explora decide no ejecutar JavaScript.

<a href="backup_page_displaying_image.aspx"
   onclick="return coolImageDisplayFunction();">hello</a>

102
2017-08-18 05:21



Hay una GRAN diferencia en el comportamiento de "#" frente a javascript: void

"#" lo desplaza al principio de la página mientras que "javascript: void (0);" no.

Esto es muy importante si está codificando páginas dinámicas. el usuario no quiere volver a la cima simplemente porque hizo clic en un enlace en la página.


57
2017-08-18 08:25



Se usa muy popularmente para agregar funciones de JavaScript al enlace HTML, por ejemplo: [Print] enlace que ves en muchas páginas web. El código es como:

<a href="javascript:void(0)" onclick="call print function">Print</a>

Por qué necesitamos 'href' mientras 'onclick' solo puede hacer el trabajo? Porque si omitimos el 'href', cuando los usuarios pasan el mouse sobre el texto "Imprimir", el cursor cambiará a "I". Teniendo 'href' permita que el cursor se muestre como si fuera un hipervínculo: una mano señalando.

PD: hay dos métodos: 1. href="javascript:void(0);" y 2. href="#" - Ambos tienen el mismo efecto. Pero el primero requiere JavaScript para ser activado en el navegador web, mientras que el segundo no. Entonces, el segundo parece ser más compatible.


46
2018-01-14 07:17



Siempre debe tener un href en su un etiquetas. Llamar a una función de JavaScript que devuelve 'indefinido' funcionará bien. Entonces lo vinculará a '#'.

Las etiquetas de anclaje en Internet Explorer 6 sin un href no obtienen el a:hover estilo aplicado.

Sí, es terrible y un crimen menor contra la humanidad, pero también lo es Internet Explorer 6 en general.

Espero que esto ayude.

Internet Explorer 6 es en realidad un crimen importante contra la humanidad.


35
2017-08-18 05:25



los void el operador evalúa la expresión dada y luego devuelve indefinido. Evita refrescar la página.


13
2017-07-24 13:47