Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Request path contains unescaped characters
Request path contains unescaped characters
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found

Submitted

Interactive Rating Component

@Petrosdevri

Desktop design screenshot for the Interactive rating component coding challenge

This is a solution for...

  • HTML
  • CSS
  • JS
1newbie
View challenge

Design comparison


SolutionDesign

Solution retrospective


This is my solution for the Interactive Rating Component.

It was overall easy and enjoyable building this project, however I faced a difficulty regarding functionality:

  • I would like to learn how can I disable the button defined in the .submit-btn class when no value is selected. I tried adding the following snippet: if(finalRating.innerHTML === '') { submitBtn.disabled = true; } However, it blocked my button even after I had chosen a rating value between the available ones. With the current code you can see that rating values display perfectly in the .thank-you state.

I would appreciate your feedback and would like to receive your comments and perspectives regarding the project. Thanks a lot!

Community feedback

Loai Esam 670

@LoaiEsam37

Posted

i have a suggestion but i do not think it is the best but i use it in my project and i think it`s good to think out the box, you can add the button event listener inside the rating buttons event listener so that it start listening for the button when the rating buttons get clicked like this:

const ratingState = document.getElementById("rating--state");
const thankyouState = document.getElementById("thank__you--state");
const submitButton = document.getElementById("submit__rating");
const ratingSpan = document.getElementById("rating");
const ratingButtons = document
  .getElementsByClassName("card__btns")[0]
  .getElementsByTagName("button");

Object.values(ratingButtons).forEach((e) => {
  e.addEventListener("click", () => {
    ratingSpan.innerHTML = e.innerHTML;
    submitButton.addEventListener("click", () => {
      ratingState.classList.add("hidden");
      thankyouState.classList.remove("hidden");
    });
  });
});

and this is my sourcecode

happy coding!!!

Marked as helpful

0

@Petrosdevri

Posted

@LoaiEsam37 I see your point but I am not sure how you manage to get all your ratingButttons if you have added the index [0] at the beginning. It would also be appreciated if you point out the exact part where your button is disabled (in any file of your project) as I couldn't figure it out on the HTML and JS files.

1
Loai Esam 670

@LoaiEsam37

Posted

@Petrosdevri I selected the with [0] for the class of the parent for the buttons not the buttons themselves :

const ratingButtons = document
  .getElementsByClassName("card__btns")[0]
  .getElementsByTagName("button");

the another thing about the part where my button is disabled, look my button event listener is nested inside the rating buttons listener:

/// ratingButtons event listener
Object.values(ratingButtons).forEach((e) => {
  e.addEventListener("click", () => {
    ratingSpan.innerHTML = e.innerHTML;
    /// submitButton event listener
    submitButton.addEventListener("click", () => {
      ratingState.classList.add("hidden");
      thankyouState.classList.remove("hidden");
    });

  });
});

that means that the submit button listener is not begin to work until the rating buttons get clicked

Marked as helpful

0

@Petrosdevri

Posted

@LoaiEsam37 Oh yes, I misread it, it's indeed pointing out only to the class.

And yeah I understood your point, thanks a lot for the explanation!

1

Please log in to post a comment

Log in with GitHub
Discord logo

Join our Discord community

Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!

Join our Discord