⊗jsPmOENEH 430 of 505 menu

Anexando manipuladores a novos elementos em JavaScript

Suponha que temos uma lista ul e um botão:

<ul> <li>item</li> <li>item</li> <li>item</li> <li>item</li> <li>item</li> </ul> <button>add</button>

Vamos obter nossos elementos nas variáveis correspondentes:

let button = document.querySelector('button'); let list = document.querySelector('ul'); let items = list.querySelectorAll('li');

Vamos fazer com que ao clicar em qualquer li um ponto de exclamação seja adicionado ao seu final:

for (let item of items) { item.addEventListener('click', function() { this.textContent = this.textContent + '!'; }); }

Agora vamos fazer com que ao clicar no botão, um novo li seja adicionado ao final da lista:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; list.appendChild(item); });

No entanto, teremos um problema: o clique em uma nova li adicionada não resultará na adição de um ponto de exclamação ao final. O fato é que adicionamos o manipulador de clique apenas às li que existiam inicialmente, mas não às novas.

Vamos corrigir o problema anexando à nova li um manipulador de clique:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', function() { // manipulador de clique this.textContent = this.textContent + '!'; }); list.appendChild(item); });

No entanto, agora o código da função manipuladora está duplicado em dois lugares - para as li existentes inicialmente e para as novas. Vamos corrigir isso extraindo o código para uma função separada:

function handler() { this.textContent = this.textContent + '!'; }

Vamos usar nossa função para evitar duplicação de código:

for (let item of items) { item.addEventListener('click', handler); } button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', handler); list.appendChild(item); });

O problema está basicamente resolvido e evitamos a duplicação do código da função manipuladora. No entanto, ainda precisamos anexar os manipuladores de eventos em dois lugares: no loop para as li existentes e no clique do botão. Na próxima lição, veremos uma maneira de nos livrarmos dessa inconveniência.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar