根据多个复选框切换 div 可见性

Posted

技术标签:

【中文标题】根据多个复选框切换 div 可见性【英文标题】:Toggle div visibility based on multiple checkboxes 【发布时间】:2011-11-10 12:58:44 【问题描述】:

我有多个复选框。检查其中任何一个都会使 div 可见。不选中它们将隐藏 div。它几乎可以工作,感谢 Nick (http://***.com/questions/4337378/toggle-div-based-on-checkbox-value),除了我想要多个复选框来切换 div。

html

<div id="somediv">
<input type="checkbox" class="form-checkbox" value="a" name="a">
<input type="checkbox" class="form-checkbox" value="b" name="b">
<input type="checkbox" class="form-checkbox" value="c" name="c">
<input type="checkbox" class="form-checkbox" value="d" name="d">
</div>

<div id="tog">tog content</div>

jQuery:

        var tog = $("#tog").hide();
        $('#somediv .form-checkbox').change(function()               
          if ($(tog).css('display') == 'none') 
            tog.show();
                 
        );

另一个:

        var tog = $("#tog").hide();
        $('#somediv .form-checkbox').change(function ()                 
            $(tog).toggle(this.checked);
        ).change();

我错过了什么? 问题是当取消选中其中一个(不是全部)时会隐藏 div。 要求只有在没有选中时才隐藏。并且默认隐藏。 如果有任何被选中,那么保持它可见,不要切换。

任何提示将不胜感激。 谢谢

【问题讨论】:

【参考方案1】:

试试 -

var tog = $("#tog").hide();
 $('#somediv .form-checkbox').change(function ()                 
   $(tog).toggle($('.form-checkbox:checked').length > 0);
 ).change();

演示 - http://jsfiddle.net/VA4NP/

这与您的第二个代码示例非常相似。它使用$('.form-checkbox:checked').length &gt; 0 作为传递给切换函数的参数,如果选中任何复选框,它应该返回true。

【讨论】:

+1。使用 :checked 选择器然后检查长度是一个非常优雅的解决方案。循环遍历每个复选框并测试它们的 checked 属性是另一种方法,但它需要的代码比这更多。【参考方案2】:

试试这个:

var tog = $("#tog").hide();
$('#somediv').change(function()
    if($('#somediv').find('input:checked').length === 0)
    
        tog.hide();
    
    else
    
        tog.show();
    
);

这里有两点需要注意。首先,您可以使用$(this).find 而不是重新运行选择器。在这种情况下,我不是 100% 确定 this 指向什么(div 或复选框)。其次,如果你有一个容器,里面装满了你想要订阅事件的输入,那么将监听器附加到父对象会更有效。复选框的更改事件将冒泡到 div。

【讨论】:

这也有效,除了 var tog = $("#tog").hide();应该放在事件之外。非常感谢。我学到了很多【参考方案3】:

你是对的,你很接近。您的更改事件所做的只是考虑选中或未选中的复选框的选中状态。因此,在更改事件中,您只需要查看是否选中了任何复选框。

可能是这样的:

var tog = $("#tog").hide();
$('#somediv .form-checkbox').change(function ()   
    if($('#somediv .form-checkbox').is(':checked').length > 0)
    
        $(tog).show();
    
    else
    
        $(tog).hide();
    
).change();

【讨论】:

【参考方案4】:

尝试类似:

    var tog = $("#tog").hide();
    $('#somediv .form-checkbox').change(function() 
      if ($('#somediv .form-checkbox').is(':checked').length > 0) 
        tog.show();
       else 
        tog.hide();
      
    );

【讨论】:

非虚拟机。 @ipr101 得到了更好的解决方案。

以上是关于根据多个复选框切换 div 可见性的主要内容,如果未能解决你的问题,请参考以下文章

根据组合框选择切换表单上其他字段的可见性 - MS Access

Angularjs 切换 div 可见性

在复选框和文本框上使用相同的功能切换可见性[重复]

JQuery在多个图像的鼠标悬停时切换可见性

切换 $(this) 元素的兄弟元素的可见性 |没有唯一 ID [jQuery]

XAML 在多个选项之间切换可见性