我有一个包含大量伪造下拉菜单的页面,这些菜单编码如下(我无法真正更改HTML):
<div class="select">
<div class="wrapper calcdropdown">
<a href="#" class="dd-openercalc">Select a calculator</a>
<a href="#" class="dd-opener pulldown-arrow"> </a>
</div>
<ul class="selectbox">
<li>Dropdown item 1</li>
<li>Dropdown item 2</li>
<li>Dropdown item 3</li>
<ul>
</div>
当我点击calcdropdown DIV中的任何一个链接时,我需要切换相应的选择框UL。当我使用toggle()时,当我第一次点击链接时会出现选择框UL,但当我再次点击链接时它不会消失。
var $j = jQuery.noConflict();
$j(document).ready(function() {
// hide all the dropdowns by default
$j(".selectbox").hide();
$j('.calcdropdown a').live('click',function(e) {
// hide the dropdowns in case another one's open
$j(".selectbox").hide();
var self = $j(this);
// show the selectbox for this link
var thisSelectbox = $j(this).parents('.select').children('.selectbox').toggle();
e.preventDefault();
});
});
这不起作用:
var $j = jQuery.noConflict();
$j(document).ready(function() {
$j(".selectbox").hide();
$j('.calcdropdown a').live('click',function(e) {
$j(".selectbox").hide();
var self = $j(this);
var thisSelectbox = $j(this).parents('.select').children('.selectbox');
if(thisSelectbox.is(':hidden')) {
thisSelectbox.show();
} else {
thisSelectbox.hide();
}
});
});
如何在显示后隐藏选择框?
答案 0 :(得分:4)
从点击功能中删除$j(".selectbox").hide();
。
否则,您始终在click-function中执行以下步骤:
编辑:(我没有意识到您使用了多个元素)
隐藏除了与点击相关的所有.selectbox以外的其他选项():
var $j = jQuery.noConflict();
$j(document).ready(function() {
// hide all the dropdowns by default
$j(".selectbox").hide();
$j('.calcdropdown a').live('click',function(e) {
var target=$j(this).parents('.select').children('.selectbox');
$j('.selectbox').not(target.toggle()).hide();
e.preventDefault();
});
});
答案 1 :(得分:2)
根据您对其他答案的评论,您将获得以下解决方案:
这有点乱,但是如果你在第一个例子中将$j(".selectbox").hide();
改为$j(".selectbox").not($j(this).parents('.select').children('.selectbox')).hide();
,你应该得到你所追求的行为。
除了与当前链接对应的元素外,它隐藏了所有.selectbox
个元素。然后,您对toggle()
的调用应该按预期工作。