如何使我的拨动开关工作?

时间:2017-05-14 10:02:01

标签: jquery css html5 twitter-bootstrap toggle

我有以下代码:jQuery + Bootstrap

https://jsfiddle.net/a27rffb2/4/

jQuery元素:

$(document).ready(function() {

  $('input:checkbox').change(function() {
    if ($("#toggle1").is(":checked")) {
      $("#collapseOneC1").collapse('show');
      $("#collapseTwoC1").collapse('show');
      $("#collapseThreeC1").collapse('show');
    } else {
      $("#collapseOneC1").collapse('hide');
      $("#collapseTwoC1").collapse('hide');
      $("#collapseThreeC1").collapse('hide');
    }
  });
  //Toggle on Element Collapse
  $("#collapseOneC1, #collapseTwoC1, #collapseThreeC1").on('shown.bs.collapse', function() {
    $('#toggle1').prop("checked", true);
  });
  $("#collapseOneC1, #collapseTwoC1, #collapseThreeC1").on('hidden.bs.collapse', function() {
    $('#toggle1').prop("checked", false);
  });
});

问题陈述:只有在显示所有选项面板时(当您单击选项面板单独打开时),才应选中切换开关。如何通过编辑上面的代码来实现这一目标?

感谢您的评论!!

2 个答案:

答案 0 :(得分:1)

您需要添加一个条件来检查是否显示了所有选项,这意味着您需要使用JQuery函数.hasClass()检查它们是否都具有 .show

if ($('#collapseOneC1').hasClass('show') && $('#collapseTwoC1').hasClass('show') && $('#collapseThreeC1').hasClass('show')) {
  $('#toggle1').prop("checked", true);
}

See updated fiddle

答案 1 :(得分:1)

请检查更新的代码: https://jsfiddle.net/KlaussU/a27rffb2/6/

    if(areAllOptionsExpanded()) {
           $('#toggle1').prop("checked", true);
    }
function areAllOptionsExpanded() {
    return $(".card-header.collapsed").length == 0;
}

我认为这是一个更好的解决方案,因为您不必为将来可能要添加的每个选项(或删除)手动添加$('#collapseOneCX')。hasClass('show')。即使你认为你不需要这样做,你仍然不能100%确定,所以最好写一个更通用的解决方案,不需要你将来做任何改变。

相关问题