Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como desativar o botão sortear do projeto 'Amigo Secreto'?

Olá!

Gostaria de melhorar o meu código do 'Amigo Secreto'. Vi que é possível clicar mais de uma vez no botão 'sortear' e isso gera vários sorteios com o mesmo array. Imagino que não era para isso acontecer. Como posso permitir com o botão sortear seja clicado somente uma vez? É possível desativar esse botão dentro da função sortear() e só reativá-lo após clicarmos em reiniciar?

Colocarei abaixo como está o meu código atual do 'Amigo Secreto':

let amigos = [];

function adicionar () { let amigo = document.getElementById('nome-amigo'); if (amigo.value == '') { alert('Informe o nome do amigo'); return; } if (amigos.includes(amigo.value)) { alert('Nome já adicionado. Informe um nome diferente!'); return; } let lista = document.getElementById('lista-amigos'); amigos.push(amigo.value); if (lista.textContent == '') { lista.textContent = amigo.value; } else { lista.textContent = lista.textContent + ', ' + amigo.value; } amigo.value = ''; atualizarLista(); atualizarSorteio(); }

function sortear() { if (amigos.length < 4) { alert('Adicione pelo menos 4 amigos!'); return; } embaralhar(amigos); let sorteio = document.getElementById('lista-sorteio'); for (let i = 0; i < amigos.length; i++) {

    if (i == amigos.length - 1) {
        sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[0] + '<br/>';
    } else {
        sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[i + 1] + '<br/>';
    }
}

}

function excluirAmigo(index) { amigos.splice(index, 1); atualizarLista(); atualizarSorteio(); }

function embaralhar(lista) { for (let indice = lista.length; indice; indice--) { const indiceAleatorio = Math.floor(Math.random() * indice); [lista[indice - 1], lista[indiceAleatorio]] = [lista[indiceAleatorio], lista[indice - 1]]; } }

function atualizarLista() { let lista = document.getElementById('lista-amigos'); lista.innerHTML = ''; for (let i = 0; i < amigos.length; i++) { // Cria um elemento de parágrafo para cada amigo let paragrafo = document.createElement('p'); paragrafo.textContent = amigos[i]; // Adiciona um evento de clique para excluir o amigo paragrafo.addEventListener('click', function() { excluirAmigo(i); }); // Adiciona o parágrafo à lista lista.appendChild(paragrafo); } }

function atualizarSorteio() { let sorteio = document.getElementById('lista-sorteio'); sorteio.innerHTML = ''; }

function reiniciar () { amigos = []; document.getElementById('lista-amigos').innerHTML = ''; document.getElementById('lista-sorteio').innerHTML = ''; }

1 resposta
solução!

Olá, Ariane.

Tudo bem?

É exatamento isso que você falou, precisa desativar o botão "sortear" na função de "sortear", e só reativá-lo na função "reiniciar" após clicar no botão "reiniciar". Vou te mostrar como fazer isso de uma forma simples.

Primeiro, você precisa adicionar um id ao botão "sortear" no seu HTML, se ainda não tiver:

<button id="botao-sortear" onclick="sortear()">Sortear</button>
<button onclick="reiniciar()">Reiniciar</button>

Depois, no seu código JavaScript, você pode desativar o botão dentro da função sortear() e reativá-lo na função reiniciar(). Veja como ficaria:

let amigos = [];

function adicionar () {
    let amigo = document.getElementById('nome-amigo');
    if (amigo.value == '') {
        alert('Informe o nome do amigo');
        return;
    }
    if (amigos.includes(amigo.value)) {
        alert('Nome já adicionado. Informe um nome diferente!');
        return;
    }
    let lista = document.getElementById('lista-amigos');
    amigos.push(amigo.value);
    if (lista.textContent == '') {
        lista.textContent = amigo.value;
    } else {
        lista.textContent = lista.textContent + ', ' + amigo.value;
    }
    amigo.value = '';
    atualizarLista();
    atualizarSorteio();
}

function sortear() {
    if (amigos.length < 4) {
        alert('Adicione pelo menos 4 amigos!');
        return; 
    }
    embaralhar(amigos);
    let sorteio = document.getElementById('lista-sorteio');
    for (let i = 0; i < amigos.length; i++) {
        if (i == amigos.length - 1) {
            sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[0] + '<br/>';
        } else {
            sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[i + 1] + '<br/>';
        }
    }
    // Desativa o botão sortear após o sorteio
    document.getElementById('botao-sortear').disabled = true;
}

function excluirAmigo(index) {
    amigos.splice(index, 1);
    atualizarLista();
    atualizarSorteio();
}

function embaralhar(lista) {
    for (let indice = lista.length; indice; indice--) {
        const indiceAleatorio = Math.floor(Math.random() * indice);
        [lista[indice - 1], lista[indiceAleatorio]] = [lista[indiceAleatorio], lista[indice - 1]];
    }
}

function atualizarLista() {
    let lista = document.getElementById('lista-amigos');
    lista.innerHTML = '';
    for (let i = 0; i < amigos.length; i++) {
        // Cria um elemento de parágrafo para cada amigo
        let paragrafo = document.createElement('p');
        paragrafo.textContent = amigos[i];
        // Adiciona um evento de clique para excluir o amigo
        paragrafo.addEventListener('click', function() {
            excluirAmigo(i);
        });
        // Adiciona o parágrafo à lista
        lista.appendChild(paragrafo);
    }
}

function atualizarSorteio() {
    let sorteio = document.getElementById('lista-sorteio');
    sorteio.innerHTML = '';
}

function reiniciar () {
    amigos = [];
    document.getElementById('lista-amigos').innerHTML = '';
    document.getElementById('lista-sorteio').innerHTML = '';
    // Reativa o botão sortear ao reiniciar
    document.getElementById('botao-sortear').disabled = false;
}

Com essas alterações, o botão "sortear" será desativado após o sorteio e reativado somente quando você clicar no botão "reiniciar".

Espero ter ajudado e bons estudos!