Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

132
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

0

use onclick functionallaity to solve this problem okay

about 4 years ago · Santiago Trujillo Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda