Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

133
Visualizações
Javascript when button is clicked is being colored while the other buttons lose their color

I have an rate app box,
I want the user to rate the app from 1-5 by clicking one of five buttons.

The button that was clicked should have color, all the others none.

So if he clicked first on 3 and then 2, when clicking on 2 the color from the 3 button will be removed so only the last button was clicked (in this case 2) will have a color.

I DID manage to do it using button array, but i know for sure there is shorter way that isnt involved button array, only by code inside the function.

html:

  <body>
  <div class="container">
    <div class="img-container">
      <img src="./images/icon-star.svg" alt="" class="img-star">
    </div>
    
    <div class="content">
      <h1>How did we do?</h1>
      <p id="content-paragraph"> 
      Please let us know how we did with your support request. All feedback is appreciated 
      to help us improve our offering!
      </p>
    </div>

    <div class="buttons-container">
      <button value = 1  class="choose " id="btn-one" onclick="paintBtn(this)">1</button>
      <button value = 2 class="choose" id="btn-two" onclick="paintBtn(this)">2</button>
      <button value = 3 class="choose" id="btn-three" onclick="paintBtn(this)">3</button>
      <button value = 4 class="choose" id="btn-four" onclick="paintBtn(this)">4</button>
      <button value = 5 class="choose" id="btn-five" onclick="paintBtn(this)">5</button>
    </div>
    <form action="thankYou.html">
      <button id="submit">SUBMIT</button>
    </form>

    <script src="index.js"></script>
</body

js:

const buttonOne = document.getElementById("btn-one")
const buttonTwo = document.getElementById("btn-two")
const buttonThree = document.getElementById("btn-three")
const buttonFour = document.getElementById("btn-four")
const buttonFive = document.getElementById("btn-five")

const buttonsArr = [buttonOne, buttonTwo, buttonThree, buttonFour, buttonFive]

function paintBtn(button) {
    buttonsArr.map(btn => btn.classList.remove("btn-clicked"))
   button.classList.add("btn-clicked")
  
}

enter image description here

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

The shorter way of doing and not having to pass every button inside an array would be to do a document.querySelectorAll(".choose") and with that way you would be able to access the NodeList of matching elements to your class.

You can examine it just like any array. If the array is empty (that is, its length property is 0), then no matches would be found.

Otherwise, you can use standard array notation to access the contents of the list. You can use any common looping statement, such as a forEach statement.

It works just fine as in the attached example.

function paintBtn(newClickedButton) {
  // clear styling from buttons
  let buttons = document.querySelectorAll(".choose");
  buttons.forEach(function(button){
     button.classList.remove("btn-clicked");
   });
  newClickedButton.classList.add("btn-clicked");
}

  
.btn-clicked{
  background-color: red;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"/>
<body>
  <div class="container">
    <div class="img-container">
      <img src="./images/icon-star.svg" alt="" class="img-star">
    </div>
    
    <div class="content">
      <h1>How did we do?</h1>
      <p id="content-paragraph"> 
      Please let us know how we did with your support request. All feedback is appreciated 
      to help us improve our offering!
      </p>
    </div>

    <div class="buttons-container">
      <button value = 1  class=" choose" id="btn-one" onclick="paintBtn(this)">1</button>
      <button value = 2 class=" choose" id="btn-two" onclick="paintBtn(this)">2</button>
      <button value = 3 class=" choose" id="btn-three" onclick="paintBtn(this)">3</button>
      <button value = 4 class=" choose" id="btn-four" onclick="paintBtn(this)">4</button>
      <button value = 5 class=" choose" id="btn-five" onclick="paintBtn(this)">5</button>
    </div>
    <form action="thankYou.html">
      <button id="submit">SUBMIT</button>
    </form>

    <script src="index.js"></script>
</body>

about 4 years ago · Santiago Trujillo Relatório

0

use onclick functionallaity to solve this problem okay

about 4 years ago · Santiago Trujillo Relatório

0

You can use instead document.getElementsByClassName to search for the button that is currently clicked instead of searching and traversing through all of the buttons:

function paintBtn(newClickedButton) {
  const clickedButtonClassName = "btn-clicked";
  const clickedButton = document.getElementsByClassName(clickedButtonClassName)[0];
  clickedButton.remove(clickedButtonClassName);
  newClickedButton.classList.add(clickedButtonClassName);
}
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda