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

Dificuldade com data attribute e classes

Oi gente! Estou fazendo um projeto onde coloco uma div dentro de um form. Dentro dessa div eu tenho dois botões que funcionam como abas, tal qual o exemplo. Estou tentando aplicar o js para ativar e inativas os botões, porém, por estar dentro do form, não funciona. Testei fora do form e ele funciona direitinho. Qual seria a solução para esse caso? Não consegui descobrir o que fazer. Coloquei os códigos abaixo, salvei em um teste para diminuir o código.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <main class="main">
        <form action="">
            <div class="main__tab">
                <button class="main__tab-button ativa" data-aba="colaborador">Colaborador</button>
                <button class="main__tab-button" data-aba="rh">RH</button>
            </div>
        </form>
    </main>
    <script src="./main.js"></script>
</body>
</html>
.main {
  background-color: pink;
}
.main__tab {
  border: 1px solid red;
}
.main__tab-button {
  background-color: blue;
  padding: 20px;
  cursor: pointer;
}

.ativa {
  background-color: aqua;
}
(() => {
    const abas = document.querySelectorAll("[data-aba]");

    inativarAbas = () => {
      abas.forEach((aba) => aba.classList.remove("ativa"));
    };
    ativarAbas = (aba) => {
        aba.classList.add("ativa");
    }
    abas.forEach((aba) =>
      aba.addEventListener("click", () => {
        inativarAbas();
        ativarAbas(aba);
      })
    );
  })();
2 respostas
solução!

Oi Natália,

Quando você coloca um botão dentro do form, o comportamento padrão é ele submeter o formulário.

Para que ele funcione dentro do formulário, basta adicionar um event.preventDefault();

O código ficaria assim:

aba.addEventListener("click", (event) => { // Adicionando o evento como argumento do click
    event.preventDefault(); // Prevenindo que o botão submeta o formulário
    inativarAbas();
    ativarAbas(aba);
})

Abraços

Ahhh show, perfeito! Obrigada!