При быстром взгляде на ваш код создается впечатление, что весь код выполняется при загрузке javascript -файла. Это может быть проблема синхронизации (ваш javascript -файл извлекается быстрее, чем ваша HTML -страница: элементы, с которыми он хочет работать, еще не доступны).
С jQuery вы можете быстро решить эту проблему, внедрив свои переменные и функции в этот держатель:
$( document ).ready(function() {
// place code here, the document is waiting
});
Поскольку вы не используете jQuery, вы можете использовать это:
добавьте атрибут "defer".
<script type="text/javascript" src="scripts/loading.js" defer></script>
Этого должно быть достаточно, спецификации найдены здесь:
https://www.w3schools.com/tags/att_script_defer.asp
Или если вы хотите, чтобы при загрузке документа выполнялись только некоторые функции Вы можете использовать функцию, которую поддерживают все браузеры:
(function() {
// place code here, the document is waiting
})();