【问题标题】:bootstrap 4 checkbox inside list-group-item as collapse not functioninglist-group-item 内的 bootstrap 4 复选框作为折叠不起作用
【发布时间】:2018-03-26 12:43:09
【问题描述】:

我已经创建了一个 bootstrap 4 list-group-item 和折叠功能。

我的问题是 list-group-item 会干扰其中的复选框,因此单击复选框本身也会激活折叠功能,但也不会响应被选中/取消选中。

如果复选框/收音机在列表组项中,如果列表组项是可折叠按钮,我如何使复选框在列表组项中独立工作?

我需要它像它一样工作,但是我可以在不触发折叠的情况下使复选框工作?

请查看代码:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>



<div class="container">
  <div class="row">
    <div class="col">
      <div class="list-group mt-5">
        <a href="#" class="list-group-item list-group-item-action" data-toggle="collapse" data-target="#sample1" aria-expanded="false" aria-controls="sample1">
        <div class="custom-control custom-checkbox float-left">
  <input type="checkbox" class="custom-control-input" id="customCheck1">
  <label class="custom-control-label" for="customCheck1"></label>
</div>
    Cras justo odio
  </a>
  <div class="collapse mb-2" id="sample1">
  <div class="card card-body">
    Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
  </div>
</div>
        <a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
        <a href="#" class="list-group-item list-group-item-action">Morbi leo risus</a>
        <a href="#" class="list-group-item list-group-item-action">Porta ac consectetur ac</a>
        <a href="#" class="list-group-item list-group-item-action disabled">Vestibulum at eros</a>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

    标签: jquery html css checkbox bootstrap-4


    【解决方案1】:

    这不起作用的原因是标签(和复选框)位于链接标签&lt;a&gt; 内,并且引导程序阻止点击事件到达孩子,在幕后有类似的东西:

    $('a').on('click', function(){ 
      // do the collapse stuff
      return false;
    });
    

    所以标签和复选框永远不会知道它们被点击,因此复选框永远不会被选中,

    因此,您要么从&lt;a&gt; 标记中获取标签和复选框,然后重新设置样式,要么添加一些javascript 以在单击label 时检查复选框:

    $('.list-group-item .custom-control-label').on('click', function(){
        var checkBox = $(this).prev('input'); 
    
      if($(checkBox).attr('checked'))
        $(checkBox).removeAttr('checked');
      else
        $(checkBox).attr('checked', 'checked');
    
        return false;
    
    })
    

    这是一个小提琴:https://jsfiddle.net/xnsm4adf/34/

    $('.list-group-item .custom-control-label').on('click', function(){
      var checkBox = $(this).prev('input'); 
      
      if($(checkBox).attr('checked'))
        $(checkBox).removeAttr('checked');
      else
        $(checkBox).attr('checked', 'checked');
        
      return false;
    
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
    
    <div class="container">
      <div class="row">
        <div class="col">
          <div class="list-group mt-5">
            <a href="#" class="list-group-item list-group-item-action" data-toggle="collapse" data-target="#sample1" aria-expanded="false" aria-controls="sample1">
            <div class="custom-control custom-checkbox float-left">
      <input type="checkbox" class="custom-control-input" id="customCheck1" />
      <label class="custom-control-label" for="customCheck1">Cras justo odio</label>
    </div>
        
      </a>
      <div class="collapse mb-2" id="sample1">
      <div class="card card-body">
        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
      </div>
    </div>
            <a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
            <a href="#" class="list-group-item list-group-item-action">Morbi leo risus</a>
            <a href="#" class="list-group-item list-group-item-action">Porta ac consectetur ac</a>
            <a href="#" class="list-group-item list-group-item-action disabled">Vestibulum at eros</a>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 不客气,很高兴我能帮上忙 :),但你为什么改变主意接受这个答案?
    • 实际上,这不是我想要的。当您选中/取消选中复选框时,它应该独立于 list-group-item 折叠功能。
    • 好的,但我不太确定您所说的“独立于折叠功能”是什么意思,因为这不会干扰折叠功能
    • 当您单击列表组项时,它会同时选中复选框。我不想要这个。两种行为不应相互干扰。该复选框专门用于检查/取消选中此列表组作为允许/禁止的某些选项,因此该复选框应保持独立于列表组项按钮折叠。这有意义吗?
    • 啊,我明白了,所以你可以在不展开列表的情况下选中复选框,我刚刚编辑了我的答案,看看。
    【解决方案2】:

    您可以添加事件点击到list-group-item

    $('.list-group-item').on('click', function() {
      var customInput = $(this).find('.custom-control-input');
      customInput.attr("checked", !customInput.attr("checked"));
    })
    

    在 codepen 中查看结果:https://codepen.io/titan_dl_1904/pen/Brwdoq

    【讨论】:

    • 这很有帮助,但是我需要该复选框是从列表组项中单独单击的。因此,用户可以选中/取消选中 list-group 选项,如果他们愿意,还可以选择折叠 list-group-item 以显示要查看的其他内容。
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2019-02-23
    • 2019-04-20
    • 2020-01-09
    • 2021-01-26
    • 2018-12-29
    • 2018-09-07
    相关资源
    最近更新 更多