javascript - 隐藏和显示复选框选项 - 整理 Jquery

标签 javascript jquery checkbox code-cleanup

所以我是 JS 和 Jquery 库的新手。我一直在玩弄一些东西,可以看到它非常不整洁,这就是我希望你们能帮助建议一种更好的方法来实现我想要实现的目标的地方。

目标:

要有多个复选框,其中一些如果被选中会显示一组子复选框。如果父复选框未选中,则子复选框也应取消选中。

HTML(这是简化的)

<div class="option1">
    <input type="checkbox" id="optionA" />
    <div id="suboption1">
        <input type="checkbox" id="optionA1" />
        <input type="checkbox" id="optionA2" />
    </div>
</div>

<div class="option2">
    <input type="checkbox" id="optionB" />
    <div id="suboption2">
        <input type="checkbox" id="optionB1" />
        <input type="checkbox" id="optionB2" />
    </div>
</div>

<div class="option3">
    <input type="checkbox" id="optionC" />
    <div id="suboption3">
        <input type="checkbox" id="optionC1" />
        <input type="checkbox" id="optionC2" />
    </div>
</div>

<!--No sub options on some-->
<div class="option4">
    <input type="checkbox" id="optionD" />
</div>

JS

/*Option 1*/

$("#suboption1").hide();

$("#optionA").click(function() {
    revealOptionA();
});

function revealOptionA(){
    if($('#optionA').is(":checked")) {
        $("#suboption1").show('hide');
    } else {
        $("#suboption1").hide('hide');
        $("#optionA1").attr('checked', false);
        $("#optionA2").attr('checked', false);
    }
}
revealOptionA();

/*Option 2*/

$("#suboption2").hide();

$("#optionB").click(function() {
    revealOptionB();
});

function revealOptionB(){
    if($('#optionB').is(":checked")) {
        $("#suboption2").show('hide');
    } else {
        $("#suboption2").hide('hide');
        $("#optionB1").attr('checked', false);
        $("#optionB2").attr('checked', false);
    }
}
revealOptionB();

/*Option 3*/

$("#suboption3").hide();

$("#optionC").click(function() {
    revealOptionC();
});

function revealOptionC(){
    if($('#optionC').is(":checked")) {
        $("#suboption3").show('hide');
    } else {
        $("#suboption3").hide('hide');
        $("#optionC1").attr('checked', false);
        $("#optionC2").attr('checked', false);
    }
}
revealOptionC();

我整理了一个快速的 JSFiddle 来更好地演示!

https://jsfiddle.net/j5pdq8p8/2/

非常感谢任何建议!

最佳答案

我为父复选框和包含所有子复选框的容器 div 添加了类。使用这种方式我们可以减少js代码。

请检查以下代码。

HTML

<div class="option1">
    <input type="checkbox" id="optionA" class="parent"/>
    <div id="suboption1" class="child">
         <input type="checkbox" id="optionA1" />
          <input type="checkbox" id="optionA2" />
    </div>
</div>

<div class="option2">
    <input type="checkbox" id="optionB" class="parent"/>
    <div id="suboption2" class="child">
         <input type="checkbox" id="optionB1" />
          <input type="checkbox" id="optionB2" />
    </div>
</div>

<div class="option3">
    <input type="checkbox" id="optionC" class="parent"/>
    <div id="suboption3" class="child">
         <input type="checkbox" id="optionC1" />
          <input type="checkbox" id="optionC2" />
    </div>
</div>

<!--No sub options on some-->
<div class="option4">
    <input type="checkbox" id="optionD" />
</div>

JS

$(document).ready(function() {
$(".child").hide();
$(".parent").change(function(){
  if ($(this).prop("checked") == false) {
        $(this).parent().find(".child").find(":checkbox").each(function() {
        $(this).prop('checked', false);
    });
    $(this).parent().find(".child").hide();
  }
  else {
        $(this).parent().find(".child").show();
  }
});
});

为了引用,我创建了这个 Fiddle

关于javascript - 隐藏和显示复选框选项 - 整理 Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38890450/

相关文章:

javascript - 根据复选框值更新第一个标题列

javascript - JQuery/Javascript 自动完成有一个非常小的错误!有 javascript 经验的人可以帮我吗?

Javascript onchange 复选框取消

jQuery Checkbox 有时只切换 div

javascript - 奇怪的 Javascript 字符串操作行为

javascript - 我可以在 javascript 中调用构造函数吗?

jquery - 在 Steps 上调整大小,以便所有字段都适合

javascript - Angular 复选框未绑定(bind)到模型

javascript - 为什么 document.getelementbyId 在 Firefox 中不起作用?

可变作用域的 JavaScript 术语