Использование jQuery .on () для создания выпадающего меню - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь создать раскрывающееся меню jQuery, которое добавляет класс, чтобы узнать, работает он или нет. Но по какой-то причине функция .on () не реагирует на щелчки. Что я делаю не так?

Вот мой HTML:

<ul id="main-menu" class="menu">
    <li>
        <a href="http://example.com">Item 1</a>
    </li>
    <li class="drop-down">
        <a href="http://example.com">Item 2</a>
        <ul class="sub-menu">
            <li>
               <a href="http://example.com">Sub Item 1</a>
            </li>
            <li>
               <a href="http://example.com">Sub Item 2</a>
            </li>
            <li>
               <a href="http://example.com">Sub Item 3</a>
            </li>
        </ul>
    </li>
    <li>
        <a href="http://example.com">Item 3</a>
    </li>
</ul>

И мой JS:

// Slide down
jQuery('#main-menu > li.drop-down > a').not('.active a').click(function(e){
    e.preventDefault();
    jQuery(this).closest('li.drop-down').addClass('active').find('ul.sub-menu').slideDown();
});

// Slide up
jQuery('#main-menu > li.drop-down.active > a').on('click', function(e){
    e.preventDefault();
    jQuery(this).closest('li.drop-down').find('ul.sub-menu').slideUp(400, function(){
        jQuery(this).closest('li.drop-down.active').removeClass('active');
    });
});

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Вам не нужно 2 обработчика для того, чего вы пытаетесь достичь.

Вы можете использовать только один обработчик, используя методы toggleClass и slideToggle jQuery.

// Slide down
jQuery('#main-menu').on('click', 'li.drop-down > a', function(e){
    e.preventDefault();
    jQuery(this)
    .closest('li.drop-down')
    .toggleClass('active')
    .find('ul.sub-menu')
    .slideToggle(400, function(){
         if($(this).is(':hidden')){
              jQuery(this).closest('li.drop-down.active').removeClass('active');
         }
    });
});

Ссылки: .toggleClass () , .slideToggle ()

1 голос
/ 14 февраля 2012

Почему бы не использовать Superfish плагин?

...