My Javascript doesn't work when I put a script element in the head to load it from a URL

I have written the code for a simple function inline, but when i created a separate js.file it doesn't want to work for some reason. I've tried everything it feels like, but maybe my tired eyes can't something!

When you put the script in an external file and then load that external script from the <head>, it loads BEFORE the DOM is ready. That means that if your script tries to reference elements in the page like you are with document.querySelectorAll(), those elements will not exist yet.

The simpleset way to fix that is to simply move the script tag:

<script type="text/javascript" src="menu.js"></script>

to right before </body>. Then, all the elements of the page will be parsed and in the DOM before your script runs like this:

Alternately, you can use a script that will notify you when the DOM is ready and you can then call your code.

See this reference and highly voted answer for a plain Javascript and cross browser way of waiting until the DOM is ready if you'd rather keep your code in the <head> section or make it so you code can be located anywhere.