0

Why is this code not working?

what's wrong in the below code? https://code.sololearn.com/Wqm0rpZOlTQ1/?ref=app

4th Dec 2018, 1:22 PM
Ravindra Desai
Ravindra Desai - avatar
10 ответов
+ 4
The for loop doesn't wait for the button to be clicked. It is run to completion, and the global variable i becomes 100 at the end. So when you do click the button, the background color is set as #0000100, which isn't really a color. Possible fix: instead of a for loop, just increment i only when the button is clicked. Does that make sense?
4th Dec 2018, 1:49 PM
Kishalaya Saha
Kishalaya Saha - avatar
+ 3
Kishalaya Saha Sorry, I had not checking the code date (and I will not: I believe you)
4th Dec 2018, 8:35 PM
visph
visph - avatar
+ 3
Actually, your while loop never end... as the condition is never reached (the i var is only incremented if the onclick event is fired/called, but that's never the case as the browser don't have time to display the button before the onload event is fired^^) [edit] If you had ran it in a browser, you need to kill/close at least the tab... If you had ran it in the android app, you need to kill/close the app to be able to run any other web display inside it...
5th Dec 2018, 10:49 AM
visph
visph - avatar
+ 2
Kishalaya Saha In fact, the final color is set to #000090, wich is a valid color, as the while loop condition is i<100 (stricly less than, not less than or equals) ;) Ravindra Desai Code replacement I suggest: window.onload = () => { var a = document.querySelector("button"), d = document. querySelector("body"), i = 0, s ='fc9630369c'; a.onclick = () => { i = (++i)%s.length; d.style.backgroundColor=`#00${s[i]}`; } }; Do an infinite loop over the char, decreasing then increasing (as default background color at start is white) and then doing it again, each time the button is pressed :)
4th Dec 2018, 8:18 PM
visph
visph - avatar
+ 2
visph the code was modified after my comment (you can compare the times). I talked about a for loop, and now there is a while loop. Earlier it did go up to i=100.
4th Dec 2018, 8:31 PM
Kishalaya Saha
Kishalaya Saha - avatar
+ 2
Yes, you increment i only when the button is clicked. But in EVERY ITERATION of the while loop, you're defining a NEW function that's supposed to be executed when the button is clicked. But that's how loops work: it won't wait for you to click the button to increment i. It would just go on forever as the condition i<100 always holds true, and we are stuck with nothing. Define the onclick event only once: not within a for/while/do-while or any other sort of loop. Increment i there. If you don't want i to get to 100, just say so! Something like if (i<90) { i += 10; } Or you could also reset i once it reaches 100: i += 10; if (i==100) { i = 10; } Does that make sense?
5th Dec 2018, 7:14 AM
Kishalaya Saha
Kishalaya Saha - avatar
+ 2
Yes, i is incremented only when button is clicked. And that is exactly why the while loop never ends, like visph explained. There's nothing to stop the flow of the loop.
5th Dec 2018, 11:38 AM
Kishalaya Saha
Kishalaya Saha - avatar
+ 1
Oh that's right! Now it did make sense😅.. thank you very much Kishalaya Saha and visph
5th Dec 2018, 12:27 PM
Ravindra Desai
Ravindra Desai - avatar
0
Thanks visph and Kishalaya Saha for your help...but what's wrong if its a while loop? I am incrementing i after the button is clicked right?then there must be no errors...
5th Dec 2018, 2:29 AM
Ravindra Desai
Ravindra Desai - avatar
0
Kishalaya Saha ,but i must be incremented ONLY when the function is called right? In this case when the button is clicked??? Until I click the button, the function onclick is not called and i must not be incremented before the function is called...where is it going wrong?
5th Dec 2018, 10:42 AM
Ravindra Desai
Ravindra Desai - avatar