0
respostas

Minha versão

  1. No HTML.
<li class="dashboard__items__item" id="game-1">
  <div class="dashboard__item__img">
    <img src="img/monopoly.png" alt="Capa jogo Monopoly">
  </div>
  <p class="dashboard__item__name">Monopoly</p>
  <a onclick="alterarStatus(1)" href="#" class="dashboard__item__button">Alugar</a>
</li>

Problemas:

  • O botão tinha onclick="alterarStatus(1)", e se você quisesse que a imagem também clicasse, teria que repetir outro onclick.
  • Cada card precisava de múltiplos onclick para funcionar em qualquer elemento.
  • Isso deixava o HTML mais poluído e repetitivo.

Pontos na minha opinião importante

  1. HTML simplificado para “clicar no card todo.
<li class="dashboard__items__item" id="game-1">
  <div class="dashboard__item__img">
    <img src="img/monopoly.png" alt="Capa jogo Monopoly">
  </div>
  <p class="dashboard__item__name">Monopoly</p>
  <a href="#" class="dashboard__item__button">Alugar</a>
</li>
  • O que mudou:
  1. Removemos todos os onclick do HTML.
  2. O botão não precisa mais do onclick.
  3. Agora o JavaScript adiciona um listener de clique no <li> inteiro, então qualquer clique dentro do card aciona a função.
  • Vantagens:
    • HTML fica limpo e mais fácil de manter.
    • Qualquer elemento dentro do card (imagem, nome, botão) dispara a mesma função.
    • Menos repetição, menos chance de erro.

Classe app.js

document.querySelectorAll(".dashboard__items__item").forEach((card) => {
  card.addEventListener("click", function (event) {
    // evita que o link "#" role a página
    event.preventDefault();

    const imagem = card.querySelector(".dashboard__item__img");
    const botao = card.querySelector(".dashboard__item__button");

    // alterna classes
    if (imagem.classList.contains("dashboard__item__img--rented")) {
      imagem.classList.remove("dashboard__item__img--rented");
      botao.classList.remove("dashboard__item__button--return");
      botao.textContent = "Alugar";
    } else {
      imagem.classList.add("dashboard__item__img--rented");
      botao.classList.add("dashboard__item__button--return");
      botao.textContent = "Devolver";
    }
  });
});

Pontos que, na minha opinião, são importantes: sempre que clicava, a páginarolava para o topo event.preventDefault(); impede. Outro ponto desconfortável é que, ao atualizar a página, a seleção é resetada. Para manter o estado, teríamos que armazenar os dados, mas essa função fica para os próximos capítulos.