2014-09-03 4 views
0

Я пытаюсь создать интерактивное подменю с помощью slideDown() через jQuery. Однако hover() работает нормально, но click() ничего не делает.jQuery click (function) not working

Вот мой JQuery:

$("#n_ulist li").click(function(){ 
    $("ul", this).stop().slideDown(500); 
    }, 
    function() { 
    $("ul", this).stop().slideUp(500); 
}); 

Что здесь не так?

+1

[.click] (http://api.jquery.com/click/) не позволяет выполнять две функции - вы думаете о [.hover] (http://api.jquery.com/hover/) – Pete

+0

и как я должен перемещаться по раскрывающимся спискам при нажатии на другой элемент списка? - Извините, я новичок в этом :( – daftpanda

+0

Вам нужно будет добавить что-то вроде '$ (this) .parent(). find ('ul'). stop(). slideUp (500);' в той же функции щелчка (до вашего слайд-шоу) - или если ваше меню более одного уровня '$ ('# n_ulist'). find ('ul'). stop(). slideUp (500);' – Pete

ответ

0

попробуйте следующее вместо:

$("#n_ulist li").click(function(){ 
    $(this).parent().find('ul').stop().slideUp(500); 
    $("ul", this).stop().slideDown(500); 
}); 

или если ваше меню более чем один уровень вы, возможно, придется использовать

$('#n_ulist').find('ul').stop().slideUp(500); 

EDIT

В соответствии с вашими комментариями

$("#n_ulist li").click(function(){ 
    $(this).parent().find('ul').stop().slideUp(500); 
    $("ul", this).stop().slideToggle(500).click(function(e) { 
     e.stopPropagation(); 
    }); 
}); 
+1

, который работал нормально, спасибо;) , но есть ли способ сделать тот же эффект, когда я снова нажимаю на родительский элемент, чтобы закрыть ('slideUp()') подменю? Итак, я хочу, чтобы подменю подменю, когда я нажимаю на один и тот же элемент, и когда я нажимаю другой родительский элемент ... – daftpanda

+0

измените 'slideDown' на' slideToggle' – Pete

+1

большое спасибо! хорошо, это работает =) – daftpanda

0

click() функция принимает только один обратный вызов в качестве аргумента, поэтому всегда ваш первый обратный вызов slideDown(500); запускается на выполнение ....

Вы можете использовать slideToggle()

$("#n_ulist li").click(function() { 
    $("ul", this).stop().slideToggle(500); 
}); 

hover() занимает 2 обратных вызовов в качестве аргументов, 1 для mouseenter и другой для mouseleave. Была версия toggle(), которая делала то же самое для события click, но была удалена в jQuery 1.9.

Если вы хотите получить плагин, который позволит вам сделать то же самое взглянуть на реализацию toggleClick().

+0

спасибо mate, есть способ переключить слайд-эффект при нажатии на другой элемент списка? – daftpanda