Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Botão "Devolver" funciona, já o "Alugar" não funciona.

Prezad@s colegas,

Tentei fazer o desafio AluGames por conta própria e cheguei a este código:

function alterarStatus(a) {
    const itemSituation = ["Devolver", "Alugar"];
    let itemSelected = document.getElementById("game-" + a);
    let itemSelectedImg = itemSelected.querySelector("div");
    let buttonName = itemSelected.querySelector("a");

     if (buttonName.innerHTML = itemSituation[0]) {
        buttonName.innerHTML = itemSituation[1];
        buttonName.className = "dashboard__item__button";
        itemSelectedImg.className = "dashboard__item__img";
     } else {
        itemSelectedImg.className = "dashboard__item__img dashboard__item__img--rented"; 
        buttonName.className = "dashboard__item__button dashboard__item__button--return";
        buttonName.innerHTML = itemSituation[0];
      }
}

Todavia, o que acontece na prática quando executo o projeto no navegador é que só o botão "Devolver" (que inicialmente está no jogo Takenoko [id = game-3]) parece está funcionando como imaginado (isto é, quando clico em "Devolver" o "if" entre em ação, trocando a classe e o texto do botão e a classe da imagem a fim de indicar que o jogo está disponível para aluguel). Todavia, o trecho do código referente ao "else" parece não funcionar, pois o botão "Alugar" está inerte, isto é, quando clico nele nada acontece.

Eu já assisti aos vídeos onde os instrutores explicam a solução do desafio e observei como fizeram. A lógica em termos gerais parece a mesma que adotei, contudo, utilizaram instruções diferentes para selecionar as classes da imagem e botão (.classList.remove e .classList.add).

Eu reconheço que o meu código está mais rudimentar, menos elegante que a solução correta, mas gostaria de entender POR QUE exatamente ele não está funcionando para o botão "Alugar" enquanto funciona para o botão "Devolver" e me ajudaria MUITO compreender qual foi o meu erro de lógica.

Obrigado pela atenção de tod@s!

4 respostas
solução!

Parece que o problema em seu código está na condição dentro do if. Você está usando buttonName.innerHTML = itemSituation[0] para verificar se o botão está atualmente com o texto "Devolver". No entanto, isso não é uma comparação; em vez disso, você está atribuindo o valor "Devolver" ao innerHTML do botão. Para comparar o conteúdo do botão, você deve usar == ou ===.

Aqui está o código corrigido:

function alterarStatus(a) {
    const itemSituation = ["Devolver", "Alugar"];
    let itemSelected = document.getElementById("game-" + a);
    let itemSelectedImg = itemSelected.querySelector("div");
    let buttonName = itemSelected.querySelector("a");

    if (buttonName.innerHTML === itemSituation[0]) {
        buttonName.innerHTML = itemSituation[1];
        buttonName.className = "dashboard__item__button";
        itemSelectedImg.className = "dashboard__item__img";
    } else {
        itemSelectedImg.className = "dashboard__item__img dashboard__item__img--rented"; 
        buttonName.className = "dashboard__item__button dashboard__item__button--return";
        buttonName.innerHTML = itemSituation[0];
    }
}

Agora, o código verificará se o innerHTML do botão é igual a "Devolver" e executará o bloco de código dentro do if apenas nesse caso, o que deve resolver o problema e permitir que o botão "Alugar" funcione corretamente. Certifique-se de que todas as classes e IDs estão configurados corretamente em seu HTML para garantir que o código funcione conforme o esperado.

Caramba!

Muito obrigado Alisson! Isso passou completamente despercebido por mim e sozinho eu iria ficar vesgo de tanto olhar pro código e não enxergaria o problema! Sinto até um pouco de vergonha por isso, rs. Mas tudo bem. Obrigado, mais uma vez!

Parabéns Mario, gostei do jeito diferente de verificar e mudar a string do button

Valeu Marina! :)