Sobes.tech
Junior

¿Qué es el modelo de eventos en el navegador?

sobes.tech AI

Respuesta de la IA

Método de manejo de interacciones del usuario (clics, entrada, desplazamiento) y eventos del sistema (carga de página, errores) en el navegador web.

Conceptos principales:

  • Evento: Acción que ocurrió.
  • Manejador de evento: Función que se ejecuta cuando ocurre el evento.
  • Objeto de evento (Event object): Se pasa al manejador y contiene información sobre el evento (tipo, elemento, coordenadas, etc.).

Flujo estándar de eventos:

  1. Captura (Fase de captura): El evento desciende desde el elemento superior del DOM (Window, Document) hasta el elemento objetivo. Los manejadores en esta fase se activan primero.
  2. Fase de destino (Target phase): El evento llega al elemento objetivo donde ocurrió.
  3. Bubbling (Fase de burbujeo): El evento sube desde el elemento objetivo de regreso a través del DOM hasta Window. Los manejadores en esta fase se activan después de la captura y la fase de destino.

Agregar manejadores:

  • Atributos HTML (onclick, onload): Método obsoleto, no recomendado para aplicaciones complejas.
  • Propiedades de elementos DOM (element.onclick): Se puede asignar solo un manejador por tipo de evento por elemento.
    // Ejemplo
    const button = document.querySelector('button');
    button.onclick = function() {
        alert('¡Botón presionado!');
    };
    
  • Método addEventListener: Método preferido. Permite agregar múltiples manejadores para un evento y controlar la fase de manejo (captura o burbujeo).
    // Ejemplo
    const button = document.querySelector('button');
    button.addEventListener('click', function(event) {
        console.log('¡Clic en el botón!', event);
    }, false); // false - burbujeo, true - captura
    

El método removeEventListener se usa para eliminar manejadores.

Delegación de eventos: Adjuntar un manejador a un elemento padre para manejar eventos de elementos hijos. Ahorra recursos y simplifica el trabajo con contenido dinámico.

// Ejemplo de delegación
const list = document.querySelector('ul');
list.addEventListener('click', function(event) {
    if (event.target.tagName === 'LI') {
        console.log('Clic en elemento de lista:', event.target.textContent);
    }
});