2012-12-17 129 views
0

我有一个使用切换的下拉菜单,并在单击+字符时触发(带有.plusminus类的元素)。当触发开关时,+符号也被切换到“display:none”,而 - (减号)符号被切换为显示。JQuery:切换触发切换链接

麻烦的是,单击减号不会触发下拉菜单再次切换 - 它只在+符号显示时才起作用。

有人会知道我做错了什么吗?

感谢

$('#menu li:has(ul)').each(function() { 
    $(this).append("<span class='submenuplus plusminus'> &#43; </span>"); 
    $(this).append("<span class='submenuminus plusminus'> &#45; </span>"); 
}); 

$('#menu').on('click','.plusminus',function() { 
    $(this).prev("ul").slideToggle("slow"), 
    $('.submenuminus, .submenuplus').toggle(); 
}); 

回答

1

我清理了点击事件你。试着像下面这样

$('#menu li:has(ul)').each(function() { 
    $(this).append("<span class='submenuplus plusminus'> &#43; </span>"); 
    $(this).append("<span class='submenuminus plusminus'> &#45; </span>"); 
    $(this).find('.submenuminus').hide();  
}); 

$('#menu .plusminus').click(function(){ 
    $(this).prevAll("ul").slideToggle("slow"), 
    $(this).parent().find('.plusminus').toggle(); 
});​ 

的一个问题是跳闸您是使用

$(this).prev("ul") 

这将返回的+标志嵌套<ul>,而不是为-标志,因为只有.prev([selector])找到与选择器相匹配的兄弟姐妹立即。该<ul>立即兄弟的-标志的<span>(该<span>+标志是在两者之间),所以你必须改用.prevAll([selector])

+0

啊谢谢 - 我现在明白了。这与我所需要的非常接近。它的工作原理,但我只需要一种方法,使其只切换“this”.plusminus(否则切换它们)。奇怪的是,$(this).find('。plusminus')。toggle();似乎打破它 – MeltingDog

+0

我已经更新了我的答案,做你在问什么。 – deefour