2014-09-03 144 views
0

我試圖通過jQuery創建一個slideDown()可點擊的子菜單。 但是 - hover()按預期工作,但click()不起任何作用。jQuery單擊(功能)不起作用

這裏是我的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 2014-09-03 08:57:07

+0

和當我點擊另一個列表元素時,我該如何上拉下拉菜單? - 對不起,我是新手:( – daftpanda 2014-09-03 08:58:08

+0

)您需要添加類似'$(this).parent()。find('ul')。stop()。slideUp(500);'在同一個點擊函數中(在你的slideDown之前) - 或者如果你的菜單多於一個層次'$('#n_ulist')。find('ul')。stop()。slideUp(500);' – Pete 2014-09-03 09:01:04

回答

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); 

編輯

按您的意見

$("#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 2014-09-03 09:09:06

+0

更改'slideDown'爲'slideToggle' – Pete 2014-09-03 09:11:11

+1

非常感謝!不錯,它的工作=) – daftpanda 2014-09-03 09:14:27

0

click()功能只需要一個回調作爲參數,所以總是第一個回調slideDown(500);被執行....

您可以使用slideToggle()

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

hover()需要2個回調作爲參數, 1代表mouseenter,另一代表mouseleave。有一個toggle()版本對點擊事件做了同樣的處理,但是它在jQuery 1.9中被刪除了。

如果你想要一個插件,這將允許你在這個toggleClick()執行相同的外觀。

+0

thanks mate,there's a way to當點擊另一個列表元素時,切換slideUp? – daftpanda 2014-09-03 09:00:44