2012-11-28 132 views
1

我有这个jQuery代码的小问题: 如果我直接调用openMenu函数,它的工作原理,但如果它没有。jQuery菜单不显示/隐藏

$(document).ready(function() { 

function checkMenu() { 

if($(this).find('ul').css('display') == 'none') { 
    openMenu(); 
} else { 
    closeMenu(); 
} 
} 

function openMenu() { 
    $(this).find('ul').css({display: "block"}); 
} 

function closeMenu() { 
    $(this).find('ul').css({display: "none"}); 
} 


$('ul li:has(ul)').click(checkMenu); 
}); 
+0

使用Firefox或Chrome控制台来查看错误 – CR41G14

回答

3

你可以把它容易对自己和使用toggle()

$('ul li:has(ul)').click(function(){ 
    $(this).find('ul').toggle(); 
}); 

http://api.jquery.com/toggle/

+0

谢谢,这工作,我很小心与JavaScript/jQuery的,所以我不知道这个功能。 – leojg

+0

我读过他们的整个API,尤其是在新版本中。他们总是添加功能/改变事物 – hunter

2

你为什么不使用.toggle()?如:

$(this).find('ul').toggle(); 

您也可以设置切换速度或者使用慢,正常,快:

$(this).find('ul').toggle('fast'); 
1

openMenu不知道什么是“本”指的是。这应该工作...

$(document).ready(function() { 

function checkMenu() { 
    var me = $(this); 
    if(me.find('ul').css('display') == 'none') { 
     openMenu(me); 
    } else { 
     closeMenu(me); 
    } 
} 

function openMenu(me) { 

    //this isn't defined.. 
    me.find('ul').css({ 
     display: "block" 
    }); 
} 

function closeMenu(me) { 
    me.find('ul').css({ 
     display: "none" 
    }); 
} 


$('ul li:has(ul)').click(checkMenu); 

});

但其他人都是对的。切换功能可以很好地适用于这种情况。