2012-07-23 3 views
0

Класс, «открытый», добавляется к элементу ul, но не к элементу dropdown#register.Почему addClass работает над одним элементом, но не с другим?

<ul class="nav"></ul> 
<script> $("#register_dropdown").addClass("open"); </script> 
<script> $("ul").addClass("open"); </script> 
<span class="dropdown" id="register_dropdown"></span> 
+0

У вас есть элемент с идентификатором '# register_dropdown'? Это не 'dropdown # register' – sachleen

+0

Да, см. Последнюю строку кода. –

+2

Возможно, переместите вызов скрипта ниже, где вы создаете '# register_dropdown'? Немного обработанного HTML будет более полезным, чем HAML. –

ответ

3

$("#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

Смежные вопросы