2014-12-05 4 views
0

Я использую bootstrap 3, и у меня есть выпадающее меню. Вместо использования анимации по умолчанию я использовал JQuery slideDown и slideUp. Единственная проблема, с которой я столкнулся, - это когда я нахожу, что она работает нормально, но когда я нажимаю меню, она отображается правильно, а slidesDown работает, второй клик затем slideUP работает, затем на третьем щелчке, чтобы проверить, будет ли работать снова, ответа нет. Я видел много примеров и разных методов, но я новичок и не имел большой удачи.JQuery .hover slideDown slideUp работает, но, не работает

Соответствующий код, который работает:

$(document).ready(function() { 
    $('.navbar-default .navbar-nav > li.dropdown').hover(function() { 
     $('ul.dropdown-menu', this).stop(true, true).slideDown('fast'); 
     $(this).addClass('open'); 
    }, function() { 
     $('ul.dropdown-menu', this).stop(true, true).slideUp(100); 
     $(this).removeClass('open'); 
    }); 
}); 

Соответствующий код, который does't работы:

$(document).ready(function() { 
    $('.navbar-default .navbar-nav > li.dropdown').click(function() { 
     $('ul.dropdown-menu', this).stop(true, true).slideDown('fast'); 
     $(this).addClass('open'); 
    }, function() { 
     $('ul.dropdown-menu', this).stop(true, true).slideUp(100); 
     $(this).removeClass('open'); 
    }); 
}); 

В конце концов, я хотел бы добавить $('#target').on('click hover', function() { поэтому, если пользователь наводит курсор на меню и случайно кликов, он закрывает меню, и они могут снова открываться, снова или снова нависая над ним или щелкая на нем.

Я не уверен, как удалить функцию наведения при нажатии.

+0

нажмите занимает только один из параметров .... –

ответ

4

Метод click() принимает в качестве аргумента только один параметр. Вы можете использовать slideToggle() и toggleClass()

$(document).ready(function() { 
    $('.navbar-default .navbar-nav > li.dropdown').click(function() { 
     $('ul.dropdown-menu', this).stop(true, true).slideToggle('fast'); 
     $(this).toggleClass('open'); 
    }); 
}); 
0

Hover принимает две функции как параметры: (http://api.jquery.com/hover/)

jQuery.hover(onHoverIn, onHoverOut); 

Нажмите занимает одно. (http://api.jquery.com/click/)

Вы должны были бы сделать что-то вроде:

$(document).ready(function() { 
    $('.navbar-default .navbar-nav > li.dropdown').click(function() { 
     if ($(this).hasClass('open')) { 
     $('ul.dropdown-menu', this).stop(true, true).slideUp(100); 
     $(this).removeClass('open'); 
     } else { 
     $('ul.dropdown-menu', this).stop(true, true).slideDown('fast'); 
     $(this).addClass('open'); 
     } 
    }); 
}); 
+0

Не работает. Это, возможно, стоит отметить, у меня одновременно есть функция наведения и щелчка. 'SlideToggle' работал, но добавление' .hasClass' ничего не делало. Спасибо за ссылки, хотя, хорошо знать – David

+0

Есть ли что-то в функции 'hover', которая могла бы возиться с ним? Потому что вышеуказанный код протестирован и работает здесь: http://jsfiddle.net/ArtBIT/2d8w1L0k/ – ArtBIT

+0

Странно. Ваше решение работает здесь, http://jsfiddle.net/2d8w1L0k/2/, когда я добавляю свои дополнительные биты и фрагменты, но он не работает на моем сайте. Может, что-то возится. Но спасибо за решение, сохранит его для будущих проектов – David

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