Design comparison
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
- @LoaiEsam37Posted over 1 year ago
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 helpful0@PetrosdevriPosted over 1 year ago@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@LoaiEsam37Posted over 1 year ago@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 helpful0@PetrosdevriPosted over 1 year ago@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 GitHubJoin 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