Actualmente estoy usando <a>
etiquetas con jQuery para iniciar cosas como eventos de clic, etc.
Ejemplo es <a href="#" class="someclass">Text</a>
Pero odio cómo el '#' hace que la página salte a la parte superior de la página. ¿Qué puedo hacer en su lugar?
javascript
jquery
html
st4ck0v3rfl0w
fuente
fuente
Respuestas:
En jQuery, cuando manejas el evento click,
devuelve falso para evitar que el enlace responda de la manera habitualevitar que la acción predeterminada, que es visitar elhref
atributo, tenga lugar (según el comentario de PoweRoy y la respuesta de Erik ):fuente
$('a[href=#]').click(function(e) { e.preventDefault(); });
Entonces esto es viejo pero ... en caso de que alguien encuentre esto en una búsqueda.
Simplemente use en
"#/"
lugar de"#"
y la página no saltará.fuente
/
, no porque#/
tenga ningún significado. puede hacer lo mismo#whateveryouwant
y evitará un salto a la cima#/
o cualquier otra cosa, por ejemplo#whatever
.incluso puedes escribirlo así:
No estoy seguro de que sea una mejor manera, pero es una forma :)
fuente
href='javascript:;'
pero tenga cuidado, desencadena el evento window.beforeUnload en IESolución # 1: (simple)
Solución # 2: (necesaria
javascript
)Solución # 3: (necesario
jQuery
)fuente
Puedes usar
event.preventDefault()
para evitar esto. Lea más aquí: http://api.jquery.com/event.preventDefault/ .fuente
Simplemente use en
<input type="button" />
lugar de<a>
y use CSS para diseñarlo para que se vea como un enlace si lo desea.Los botones están hechos específicamente para hacer clic, y no necesitan ningún atributo href.
La mejor manera es usar la acción de carga para crear el botón y agregarlo donde lo necesite a través de JavaScript, por lo que con JavaScript deshabilitado, no se mostrarán en absoluto y no confundirán al usuario.
Cuando lo usa
href="#"
, obtiene toneladas de enlaces diferentes que apuntan a la misma ubicación, lo que no funcionará cuando el agente no sea compatible con JavaScript.fuente
#
.Si desea usar un ancla, puede usar http://api.jquery.com/event.preventDefault/ como las otras respuestas sugeridas.
También puede usar cualquier otro elemento como un intervalo y adjuntar el evento de clic a eso.
fuente
Puedes usarlo
#0
como href, ya0
que no está permitido como id, la página no saltará.fuente
fuente
Solo usa
JQUERY
fuente
Si el elemento no tiene un valor href significativo, entonces no es realmente un enlace, entonces, ¿por qué no utilizar algún otro elemento?
Según lo sugerido por Neothor, un lapso es igual de apropiado y, si se diseña correctamente, será visiblemente obvio como un elemento en el que se puede hacer clic. Incluso puede adjuntar un evento de desplazamiento, para que el elemento se "ilumine" cuando el mouse del usuario se mueva sobre él.
Sin embargo, una vez dicho esto, es posible que desee repensar el diseño de su sitio para que funcione sin javascript, pero javascript lo mejore cuando esté disponible.
fuente
Los enlaces con href = "#" casi siempre deben reemplazarse con un elemento de botón:
El uso de enlaces con href = "#" también es un problema de accesibilidad, ya que estos enlaces serán visibles para los lectores de pantalla, que leerán "Enlace - Texto", pero si el usuario hace clic, no irá a ningún lado.
fuente
Simplemente puede pasar una etiqueta de anclaje sin una propiedad href y usar jQuery para realizar la acción requerida:
<a class="foo">bar</a>
fuente
#
, supuse que esto no es una preocupación para usted y, por lo tanto, le ofrecí esta solución, ya que es probable que sea el medio más simple para satisfacer sus necesidades.a:link
Los selectores CSS no apuntarán a esta etiqueta de anclaje.He usado:
fuente
El
#/
truco funciona, pero agrega un evento de historial al navegador. Por lo tanto, hacer clic hacia atrás no funciona, ya que el usuario puede quererlo / esperarlo.$('body').click('a[href="#"]', function(e) {e.preventDefault() });
es mi camino, ya que funciona para contenido ya existente y cualquier elemento agregado al DOM después de la carga.Específicamente, necesitaba hacer esto en un menú desplegable de arranque dentro de una
.btn-group
(Referencia) , así que lo hice:$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });
De esta manera fue dirigido, y no afectó nada más en la página.
fuente
Siempre he usado:
al intentar evitar el salto de página. No estoy seguro si este es el mejor, pero parece que ha estado funcionando bien durante años.
fuente
Hay 4 formas similares para evitar que la página salte a la parte superior sin JavaScript:
Opción 1:
Opcion 2:
Opcion 3:
Opción 4 ( no recomendado ):
Pero es mejor usarlo
event.preventDefault()
si está entregando el evento click en jQuery.fuente
También puede devolver falso después de procesar su jquery.
P.ej.
fuente
Yo uso algo como esto:
fuente
Para evitar que la página salte, debe llamar
e.stopPropagation();
después de llamare.preventDefault();
:stopPropagation
evita que el evento suba al árbol DOM. Más información aquí: https://api.jquery.com/event.stoppropagation/fuente
Si desea migrar a una sección de anclaje en la misma página sin saltar de página, use:
Simplemente use "# /" en lugar de "#" por ej.
fuente
Agregar algo después
#
establece el foco de la página en el elemento con esa ID. La solución más simple es usar#/
incluso si está usando jQuery. Sin embargo, si está manejando el evento en jQuery, esteevent.preventDefault()
es el camino a seguir.fuente
El
<a href="#!">Link</a>
y<a href="#/">Link</a>
no funciona si uno tiene que hacer clic en la misma entrada más de una vez ... solo requiere un clic de evento para cada entrada múltiple.Todavía la mejor manera de hacerlo es con
<a href="#">Link</a>
luego,
fuente