javascript

Prevenir comportamiento o pedir confirmación para navegar a link en JavaScript

Hoy veremos cómo prevenir que una etiqueta <a> siga su comportamiento, o mejor dicho, dependiendo de una condición vamos a prevenir la acción o dejar que ocurra. En otras palabras, veremos cómo evitar la acción de un un anchor con o sin condiciones.

Un poco de historia

(si quieres, puedes saltar al siguiente título, no te perderás nada técnico)

Recientemente estuve haciendo un proyecto escolar pero por las prisas no pude poner una confirmación al eliminar algo. Dicho proyecto está hecho con CodeIgniter (no fue mi elección, lo juro) así que para eliminar se basaba en direcciones URL que llamaban a un controlador. Algo como:

localhost/ejemplo/eliminar/1

Ahora, como es una URL, con el simple hecho de visitarla se elimina (no hay problema, es un proyecto escolar) pero todavía quedaba la duda de cómo pedir una confirmación al usuario, al final me decidí por poner un confirm en el <a>.

 

Prevenir que se siga el link de un anchor

Esto es muy fácil, si vienes para ver cómo prevenir, la respuesta es:

See the gist on github.

El DOMContentLoaded es opcional; así como la obtención del elemento. Lo que importa es agregarle un listener de click, recibir como argumento el evento y llamar a evento.preventDefault(), de esta manera aunque el usuario haga click, no se irá al enlace especificado.

Igualmente podrías usar querySelectorAll, hacer un forEach y en cada uno de ellos agregarle un listener, cosa que veremos más abajo como bonus.

Puedes probarlo aquí, por cierto.

Si haces click, verás que no pasa nada y no te deja ir al sitio web.

Pedir confirmación para seguir el link o no

Ahora veamos justamente lo que apliqué, y es un confirm que te muestra un mensaje y da dos botones, uno para decir que sí y otro para decir que no. Internamente la función regresa un booleano dependiendo de la opción que el usuario elija.

Nuestro código podría quedar escrito de esta manera:

See the gist on github.

Ahora es un poco más largo. Si el usuario no confirma (esto es, que confirm devuelva false) entonces prevenimos la acción por defecto. En caso de que se elija que sí, no se hace nada y el click se realiza normalmente.

Puedes probarlo aquí.

Bonus: con múltiples elementos

Ahora sí veamos lo que decía hace un momento sobre múltiples elementos y esas cosas. Pues bien, en mi caso el código queda así:

See the gist on github.

Como todos mis “botones” (que en realidad son anchors) tienen el icono del bote de basura, puedo seleccionarlos con querySelectorAll y un selector CSS. Debido a que están dentro de un span y éste a su vez en un a, tengo que acceder al abuelo (bueno, al padre del padre).

Una vez que obtenemos al abuelo, le agregamos un listener en el evento click. Dicho listener será una función que definimos arriba, la cual utiliza una forma corta del if.

Al final, cada que el usuario haga click en un botón para eliminar, se le preguntará. En caso de que elija que no, se previene el evento.

Prevenir comportamiento de un anchor o link con JavaScript

Siento haberlo censurado tanto, pero es por cuestiones de privacidad y cosas de esas.

Conclusiones y lecturas recomendadas

Lo sé, lo sé, es un poco sucio pero nos sacará de un apuro. Además, sólo fue un hack que solucionaré pronto. Cabe mencionar que el problema principal es que lo hice mayormente con PHP, y luego le puse encima la funcionalidad de JavaScript.

Mira aquí lo que es const en JavaScript, y aquí lo que son las funciones flecha en JavaScript.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

3 días hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

4 días hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

4 días hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

5 días hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

2 semanas hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

2 semanas hace

Esta web usa cookies.