jQuery切换不切换

时间:2011-06-30 00:03:22

标签: jquery toggle hide show html-lists

我有一个包含大量伪造下拉菜单的页面,这些菜单编码如下(我无法真正更改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>

当我点击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();
        }
    });
});

如何在显示后隐藏选择框?

2 个答案:

答案 0 :(得分:4)

从点击功能中删除$j(".selectbox").hide();

否则,您始终在click-function中执行以下步骤:

  1. 隐藏元素
  2. 切换元素(使其始终可见,因为您之前隐藏了它)
  3. 编辑:(我没有意识到您使用了多个元素)

    隐藏除了与点击相关的所有.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();
        });
    });
    

    http://jsfiddle.net/doktormolle/qG8ps/

答案 1 :(得分:2)

根据您对其他答案的评论,您将获得以下解决方案:

  1. 隐藏所有其他菜单
  2. 切换当前点击的菜单的可见性
  3. 这有点乱,但是如果你在第一个例子中将$j(".selectbox").hide();改为$j(".selectbox").not($j(this).parents('.select').children('.selectbox')).hide();,你应该得到你所追求的行为。

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