13

Hi I'm new to Javascript and I'm trying to get a function to remove some elements once the window has loaded.

Here is the HTML

<html> <head> <title>Simple Quiz</title> <script type="text/javascript" src="script.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h1>Quiz</h1> <h2>Question</h2> <p id="question"></p> <form name="choices"> <fieldset> <!-- insert questions here dynamically via javascript! --> <label><input type="radio" name="choice" value="1st">First-class</label> <label><input type="radio" name="choice" value="2day">2-day Air</label> <label><input type="radio" name="choice" value="overnite">Overnight</label> </fieldset> </form> </body> </html> 

The function removeQuestions() works fine when called in the console after the page has loaded but I can't seem to get it to work using the onload event for the window. Interestingly enough, it works on JSFiddle (found here) but not when I fire up the page locally in chrome. What am I not getting right? Thank you

Here is the script.js file:

// JS executed after window has been loaded function removeQuestions() { var choices = document.forms.choices.elements[0].children; // remove choices while (choices.length > 0) { var choice = choices[0]; choice.parentNode.removeChild(choice); } } window.onload = removeQuestions(); 
5
  • now this is a little off topic but why would you remove the elements on page load? just don't add them in your html. Commented Aug 21, 2013 at 23:41
  • 1
    I'm just using this as a learning exercise right now. It doesn't have any practical use whatsoever :) Commented Aug 21, 2013 at 23:43
  • 1
    you can also shorten your function without checking the length var c=document.forms.choices.elements[0]; while(c.children[0]){c.removeChild(c.children[0])} Commented Aug 21, 2013 at 23:57
  • and as your working on a quiz .. check out this one ...stackoverflow.com/a/18337257/2450730 the json varinte is complete and much better. Commented Aug 22, 2013 at 0:01
  • ah, yes that's much more succinct and to the point. thanks! Commented Aug 22, 2013 at 0:17

3 Answers 3

28

You are not assigning your function to window.onload, you are calling your function, then assigning the result to window.onload

Replace window.onload = removeQuestions(); with window.onload = removeQuestions;

The browser expects a callback function to be in onload, so that it can call it whenever the window is loaded.

window.onload = removeQuestions(); is equivalent to

var result = removeQuestions(); // undefined, the function does not return anything window.onload = result; 
Sign up to request clarification or add additional context in comments.

4 Comments

Hrm, I'm still not getting any response from the page =/
@EugeneKim: yes. See the first answer in this question for a simple exemple you can reproduce: Execute Javascript When Page Has Fully Loaded
Hrm I opened it in a new tab again and it works! Perhaps it wasn't working as a result of browser caching?
@Lepidosteus is this also my case? stackoverflow.com/questions/71606235/…
6

In my case it did not work because I had set window.onload in two scripts running on the same page. It took me time to realise this mistake because the first script had console.log messages but the second script did not have any. Browser loaded the second script after first script and my window.onload = somefunction was now set to a function without any console.log giveing me the impression that it is not working at all

1 Comment

Thanks for this! It was the exact same problem I was facing with the blogging platform I use: github.com/curiousprogrammer-net/curiousprogrammer.blog/pull/27/…
5

To simplify, thats how the callback should look like:

window.onload = (event) => { console.info('Page is fully loaded'); removeQuestions(); }; 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.