Такое поведение может быть связано с тем, что часть контента, в том числе и необходимая для работы этого скрипта, генерируется динамически после загрузки основного документа.
Самый надёжный способ для таких ситуаций - вешать обработчик на родительский элемент, гарантированно присутствующий на момент DOMContentLoaded и использовать
всплытие событий.
Второй вариант - искать, в каком месте реально создаётся и добавляется в DOM нужный элемент и вешать обработчик в это месте кода.