jQuery切换未切换



我有一个页面,上面有一堆假的下拉菜单,代码是这样的(我真的无法更改HTML(:

<div class="select">
    <div class="wrapper calcdropdown">
        <a href="#" class="dd-openercalc">Select a calculator</a>
        <a href="#" class="dd-opener pulldown-arrow">&nbsp;</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();

否则,您总是在点击功能中执行以下步骤:

  1. 隐藏元素
  2. 切换元素(使其始终可见,因为您以前将其隐藏(

编辑:(我没有意识到你使用了不止一个元素(

要隐藏除与点击相关的复选框之外的所有复选框,请使用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/

根据您对另一个答案的评论,您正在寻找一个解决方案:

  1. 隐藏所有其他菜单
  2. 切换当前单击的菜单的可见性

这有点混乱,但如果您将第一个示例中的$j(".selectbox").hide();更改为$j(".selectbox").not($j(this).parents('.select').children('.selectbox')).hide();,您应该会得到您想要的行为。

这将隐藏除与当前链接对应的元素之外的所有.selectbox元素。然后,您对toggle()的调用应该可以按预期工作。

相关内容

  • 没有找到相关文章

最新更新