2012-11-28 127 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); 

});

但其他人都是對的。切換功能可以很好地適用於這種情況。