$("#register_dropdown")
возвращает пустой объект JQuery, как register_dropdown
нет в DOM при выполнении этой строки.
Я не испытывал с Haml, но оборачивать ваши скрипты внутри DOM ready handler это путь:
%script $(function(){ $("#register_dropdown").addClass("open"); });
В обычной разметки она должна быть оказана как:
<script> $(function(){ $("#register_dropdown").addClass("open"); }); </script>
Вы можете также используйте более подробный способ, если вы предпочитаете (тот же результат, что и выше):
$(document).ready(function() {
//DOM is ready, put your code here
$("#register_dropdown").addClass("open");
});
Это предотвратит запуск вашего кода до полной загрузки DOM. Вы можете просто переместить эту строку после добавления элемента в DOM, но это хорошая практика, чтобы манипулировать DOM после его готовности.
Reference
У вас есть элемент с идентификатором '# register_dropdown'? Это не 'dropdown # register' – sachleen
Да, см. Последнюю строку кода. –
Возможно, переместите вызов скрипта ниже, где вы создаете '# register_dropdown'? Немного обработанного HTML будет более полезным, чем HAML. –