<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Diego Velesaca Orellana - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Diego Velesaca Orellana - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 19:37:22 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/diego-velesaca-orellana/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Delegación de eventos en JavaScript: explicado con un ejemplo ]]>
                </title>
                <description>
                    <![CDATA[ Delegación de eventos es un patrón basado en el concepto de Propagación de eventos (Event Bubbling). Es un patrón de manejo de eventos que permite gestionar eventos en un nivel superior del árbol del DOM, en lugar de hacerlo directamente en el nivel donde el evento fue inicialmente recibido. Hay ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/delegacion-de-eventos-en-javascript-explicado-con-un-ejemplo/</link>
                <guid isPermaLink="false">677d94c1f310b3064b9abc82</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Diego Velesaca Orellana ]]>
                </dc:creator>
                <pubDate>Wed, 05 Feb 2025 15:53:42 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2025/02/2.-event-delegation-js.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/event-delegation-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Event Delegation in JavaScript –Explained with an Example</a>
      </p><p>Delegación de eventos es un patrón basado en el concepto de <strong>Propagación de eventos (Event Bubbling)</strong>. Es un patrón de manejo de eventos que permite gestionar eventos en un nivel superior del árbol del DOM, en lugar de hacerlo directamente en el nivel donde el evento fue inicialmente recibido.</p><p>Hay una <a href="https://www.freecodecamp.org/espanol/news/evento-bubbling-en-javascript-como-funciona-la-propagacion-de-eventos-con-ejemplos/">versión en video de este tema</a><strong> </strong>si tú lo prefieres<strong>.</strong></p><h2 id="una-breve-introducci-n-a-propagaci-n-de-eventos-">Una breve introducción a propagación de eventos.</h2><p>Por defecto, los eventos desencadenados en un elemento se propagan hacia arriba en el árbol del DOM hasta el elemento padre, sus ancestros, y finalmente hasta el elemento raíz (<code>html</code>).</p><p>Mira este ejemplo.</p><pre><code class="language-html">&lt;div&gt;
  &lt;span&gt;
    &lt;button&gt;Click Me!&lt;/button&gt;
  &lt;/span&gt;
&lt;/div&gt;</code></pre><p>Aquí tenemos un, <code>div</code> el cual es padre de un, <code>span</code> quien a su vez es padre del elemento <code>button</code>.</p><p>Debido a la propagación de eventos, cuando el botón recibe un evento, por ejemplo un clic, el evento se propaga hacia arriba en el árbol del DOM, &nbsp;por lo que el <code>span</code> y el <code>div</code> también recibirán el evento respectivamente.</p><p>Si quieres aprender acerca de propagación de eventos más a detalle, puedes &nbsp;<a href="https://www.freecodecamp.org/espanol/news/evento-bubbling-en-javascript-como-funciona-la-propagacion-de-eventos-con-ejemplos/">leer un artículo sobre esto aquí</a><strong> .</strong></p><h2 id="-c-mo-funciona-la-delegaci-n-de-eventos">¿Cómo funciona la delegación de eventos?</h2><p>Con la delegación de eventos, en lugar de manejar el evento en el <code>button</code> puedes manejarlo en el <code>div</code>.</p><p>La idea es "<strong>delegar</strong>" el manejo de un evento a un elemento diferente (en este caso, el div, que es el elemento padre) en lugar del elemento actual (el botón) que recibió el evento.</p><p>Aquí tienes un ejemplo en código de lo que quiero decir:</p><pre><code class="language-js">const div = document.getElementsByTagName("div")[0]

div.addEventListener("click", (event) =&gt; {
  if(event.target.tagName === 'BUTTON') {
    console.log("button was clicked")
  }
})</code></pre><p>El objeto <code>event</code> tiene una propiedad <code>target</code> que contiene información &nbsp;sobre el elemento que realmente recibió el evento. Con <code>target.element</code> &nbsp;obtenemos el nombre de la etiqueta del elemento y verificar si es<strong> BUTTON.</strong></p><p>Con este código, cuando haces clic en el <code>button</code> , el evento se propaga hacia arriba hasta el <code>div</code> el cual maneja el evento.</p><h2 id="beneficios-de-la-delegaci-n-de-eventos-">Beneficios de la delegación de eventos.</h2><p>La delegación de eventos es un patrón útil que te permite escribir código más limpio y reducir la cantidad de <strong>event listeners (escuchadores de eventos)</strong>, especialmente cuando comparten una lógica similar.</p><p>¿A qué me refiero con esto? Mira este código:</p><pre><code class="language-html">&lt;div&gt;
  &lt;button&gt;Button 1&lt;/button&gt;
  &lt;button&gt;Button 2&lt;/button&gt;
  &lt;button&gt;Button 3&lt;/button&gt;
&lt;/div&gt;</code></pre><p>Aquí tenemos 3 botones. Supongamos que queremos manejar un evento clic en cada botón, de manera que, al hacer clic, el texto del botón se registre en la consola. Podemos implementarlo de la siguiente manera:</p><pre><code class="language-js">const buttons = document.querySelectorAll('button')

buttons.forEach(button =&gt; {
  button.addEventListener("click", (event) =&gt; {
    console.log(event.target.innerText)
  })
})</code></pre><p>Usamos <code>querySelectorAll</code> aquí porque devuelve &nbsp;un <code>NodeList</code>, el cual permite usar el método <code>forEach</code>. Por otro lado, &nbsp;<code>getElementByTagName</code> devuelve una, <code>HTMLCollection</code> el cual no tiene el método <code>forEach</code>, por lo que no se podría iterar de la misma manera.</p><p>Cuando haces clic en el primer botón, se registra "Button 1" en la consola. Para el segundo botón, se registra "Button 2", &nbsp;y para el tercer botón, se registra "Button 3".</p><p>Aunque esto funciona como esperamos, hemos definido &nbsp;tres event listeners, uno para cada botón.</p><p>Dado que el evento clic en estos botones se propaga hacia arriba en el árbol del DOM, podemos usar un elemento padre ó ancestro común para manejar el evento. En este caso, delegamos la lógica a un elemento ancestro compartido, encargándose de gestionar el evento para todos los botones.</p><p>A continuación, te explicamos cómo:</p><pre><code class="language-js">const div = document.querySelector('div')

div.addEventListener("click", (event) =&gt; {
  if(event.target.tagName === 'BUTTON') {
    console.log(event.target.innerText)
  }
})</code></pre><p>Ahora, tenemos solo un event listener, pero la misma lógica: cuando haces clic en el primer botón, "Button 1" se registra en la consola, y lo mismo ocurre para los demás botones. </p><p>Incluso si agregamos un botón adicional como este: </p><pre><code class="language-html">&lt;div&gt;
  &lt;button&gt;Button 1&lt;/button&gt;
  &lt;button&gt;Button 2&lt;/button&gt;
  &lt;button&gt;Button 3&lt;/button&gt;
  &lt;button&gt;Button 4&lt;/button&gt;
&lt;/div&gt;</code></pre><p>No tendremos que modificar el código JavaScript porque el nuevo botón &nbsp;también comparte el <code>div</code> padre (el cual delegamos para manjera los eventos) con los otros botones.</p><h2 id="conclusi-n">Conclusión</h2><p>Con la delegación de eventos, reduces la cantidad de event listeners y centralizas la lógica basada en eventos en solo lugar. Esto facilita agregar y remover elementos sin necesidad de agregar o remover manualmente event listeners existentes.</p><p>Delegación de eventos es posible, gracias la propagación de eventos en el DOM, donde el evento que recibe un elemento hijo también se transmite a su elemento, padre y ancestros. Nuevamente, puedes <a href="https://www.freecodecamp.org/espanol/news/evento-bubbling-en-javascript-como-funciona-la-propagacion-de-eventos-con-ejemplos/">leer más acerca de propagación de evento aquí</a>.</p><p>¡Gracias por leer, y happy coding!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
