Eliminar el comportamiento por defecto de todos los enlaces de una web

1
(1)

Publicado

Aviso importante web en obras

Es posible que el contenido que estás visualizando tenga un formato un poco raro o que se haya perdido algún contenido. Esto se debe a que en 2023/09 decidí renovar la página y con más de 1000 escritos el trabajo de irlos revisando uno por uno es agotador. Poco a poco iré corrigiendo todos los contenidos. ¡Gracias por la comprensión!

Eliminar el comportamiento por defecto de todos los enlaces de una web 1

En un ejercicio previo hemos visto como modificar el destino de todos los enlaces de un documento web.

Lo encontraréis en este enlace.

En este ejercicio resolvemos como eliminar el comportamiento por defecto de todos los enlaces. Y como devolverles de nuevo su comportamiento normal.

Valga decir que este ejercicio sería muy sencillo con jquery pero lo hacemos con javascript puro por fines puramente didácticos.

Entre los conceptos clave más importantes que usaremos:

  • Llamar a todos los nodos de tipo enlace de un documento web al cargar la página.
  • Uso de preventDefault
  • Uso de addEventListener() y removeEventListener().

Vayamos al ejercicio:

Enunciado

Dado el siguiente html añade el código JS necesario para cumplir 2 objetivos:

  • Al cargarse el documento ningún enlace del documento es hábil. Ninguna responde a su comportamiento por defecto.
  • Cuando se haga click en el botón activar comportamiento todos los enlaces volverán a funcionar con normalidad.
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="description" content="Anular enlaces">
        <meta name="author" content="Francesc Ricart">
        <title>Ejercicio js - anular comportamiento por defecto de todos los enlaces de un documento web</title>
        
    </head>
    <body>
        
    <ul>
        <li><a href="https://francescricart.com/tutorial-html" target="_blank">Tutorial HTML</a></li>
        <li><a href="https://francescricart.com/tutorial-css" target="_blank">Tutorial CSS</a></li>
        <li><a href="https://francescricart.com/tutorial-javacript" target="_blank">Tutorial JS</a></li>
        <li><a href="https://francescricart.com/tutorial-wordpress" target="_blank">Tutorial WordPress</a></li>
        <li><a href="https://francescricart.com/contacto" target="_blank">Contacto</a></li>
    </ul>
    
    <button id="reset">Activar comportamiento</button>
    
    <script>
//aquí el código JS resolución del ejercicio
    </script>

    </body>
</html>

Solución del ejercicio

Solucionamos el ejercicio asignando una función de nombre evitarComportamiento a todos los enlaces del documento web.

Esta función se ejecuta siempre que un enlace recibe un click. Captura el tipo de evento que haya recibido y lo previene (leer esta entrada).

Al botón activar comportamiento se le asigna un evento click que llama a un removeEventListener() y que elimina exactamente la función evitarComportamiento en todos los enlaces.

Veámoslo en el código:[vc_custom_heading text=»¿Como queda el código JS?» font_container=»tag:h3|text_align:left» use_theme_fonts=»yes»]

window.onload = init;
        
        function init(){
            var enlaces = document.getElementsByTagName("a");
            var boton = document.getElementById("reset");
            
            for(i=0;i<enlaces.length;i++){
                enlaces[i].addEventListener("click",evitarComportamiento);
        }
            boton.addEventListener("click",function(){
           for(i=0;i<enlaces.length;i++){
                enlaces[i].removeEventListener("click",evitarComportamiento);
        }
            });
        }            
        
        function evitarComportamiento(e){
            comportamiento = window.event || e;
            comportamiento.preventDefault();
        }

Si juntamos todas las piezas resolvemos el ejercicio.¡Hola!

Querido lector,

Puedes encontrar todo el código junto en este enlace.

¡Si te ha gustado este contenido te animo a seguirme en mi perfil de empresa de Linkedin!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *