我有一个页面,上面有一堆假的下拉菜单,代码是这样的(我真的无法更改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>
当我点击计算下拉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();
}
});
});
显示选择框后,如何隐藏它们?
从单击函数中删除$j(".selectbox").hide();
。
否则,您总是在点击功能中执行以下步骤:
- 隐藏元素
- 切换元素(使其始终可见,因为您以前将其隐藏(
编辑:(我没有意识到你使用了不止一个元素(
要隐藏除与点击相关的复选框之外的所有复选框,请使用not((:
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();
});
});
http://jsfiddle.net/doktormolle/qG8ps/
根据您对另一个答案的评论,您正在寻找一个解决方案:
- 隐藏所有其他菜单
- 切换当前单击的菜单的可见性
这有点混乱,但如果您将第一个示例中的$j(".selectbox").hide();
更改为$j(".selectbox").not($j(this).parents('.select').children('.selectbox')).hide();
,您应该会得到您想要的行为。
这将隐藏除与当前链接对应的元素之外的所有.selectbox
元素。然后,您对toggle()
的调用应该可以按预期工作。