Добавление Javascript в заголовок темы вызывает ошибку $ is not defined

Поскольку Discourse — это SPA, полагаться на событие “DOMContentLoaded” документа не очень полезно, так как DOM документа всегда “загружен”, но элементы могут отсутствовать. Вместо этого, как упомянул @merefield, лучше использовать компоненты или что-то вроде этого: How do you force a script to refire on every page load in Discourse? - #5 by simon. Таким образом, при каждом изменении страницы ваш код сможет проверять наличие элемента, который вы пытаетесь изменить.