Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
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 answers
Answer question

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 Report

0

use onclick functionallaity to solve this problem okay

about 4 years ago · Santiago Trujillo Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!