【问题标题】:Show / hide nested checkbox labels显示/隐藏嵌套的复选框标签
【发布时间】:2014-06-12 17:32:38
【问题描述】:

我正在尝试使嵌套标签/复选框在其包含标签/复选框被选中时可见。我不知道如何定位特定的嵌套标签,或者这是否是正确的方法。

这是一个小提琴:

http://jsfiddle.net/kirkbross/tfKva/15/

这里是javascript:

$(".label-1").click(function() {
    $("input:checkbox").each(function() {
        if ($(this).prop("checked")) {
            $(this).next('.label-2').show(); // can't figure out how to get at the second "nested" label

        } else {
            $(this).next('.label-2').hide();
        }
    });
});

【问题讨论】:

  • .show()visibility:hidden; 中不显示元素
  • 同样对于您的 JSFiddle,您没有包含 jQuery,这意味着几乎什么都行不通!

标签: jquery checkbox nested label show


【解决方案1】:

.show() 不显示元素如果你使用过visibility:hidden;

我会建议你使用

  style="display:none;" 

而不是

 style="visibility:hidden;"

DEMO

【讨论】:

  • 这确实解决了我原来的问题,所以非常感谢您的回答。我将下一个标记为答案,因为它也处理我草率的 HTML。
【解决方案2】:

对此的一些想法:

  • 通过不在标签内嵌套多个控件,您的 html 结构可能会更好一些(如果您正确使用 html for 属性,这将导致问题)。
  • 有时阅读 css 类比使用内联样式更容易(hide()show() 的实际作用)

考虑到这一点,我建议如下。 JSFIDDLEhttp://jsfiddle.net/SaHGs/

HTML

<div class="check-container">
  <label for="label1">This is label 1</label>
  <input type="checkbox" id="label1" class="hideshow" />

  <div class="autohide checkhidden">
    <label for="label2">This is label 2</label>
    <input type="checkbox" id="label2" />
  </div>
</div>

Javascript

$(function () {
  $(".hideshow").click(function(args) {
    var showStuff = $(this).prop("checked");
    $(this).parent().find(".autohide").each(function () {
      if (showStuff)
        $(this).removeClass("checkhidden");
      else
        $(this).addClass("checkhidden");
    });
  });
});

CSS

ul { list-style:none; }
li {margin-bottom:20px; }

.check-container {
    position: relative;
    display:block;
    width:300px;
    height:200px;
    background: #e8e8e8;
}

.checkhidden { display: none; }

希望有帮助!

编辑

要选中和取消选中容器中的第一项,只需将以下两个函数添加到您的 javascript:

$(".check-container").click(function () {
    var el = $(this).find("input:first");
    el.prop("checked", !el.prop("checked")).change();
});

$("input, label").click(function (e) {
    e.stopPropagation();
});

【讨论】:

  • 这太棒了...在我的情况下,唯一的问题是标签(灰色框)需要成为点击处理程序...
  • @KirkRoss 非常相似,但您可能正在寻找这个,然后:jsfiddle.net/hk7v7/2(添加了点击停止传播以确保容器在子字段更改时不会隐藏和显示)
  • 这太近了! :) 现在,如何使标签 2 可单击以选中/取消选中复选框 2。现在单击标签 2 会触发取消选中复选框 1,大概是因为它在下面?
  • @KirkRoss 这就是preventPropegation 调用的作用。在这里试用最新版本,我认为它可以工作:jsfiddle.net/hk7v7/3
  • 完美!非常非常非常感谢...我会认真学习的。
猜你喜欢
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多