Bootstrap把复选框放在下拉列表中

J.Z*_*Zil 6 html css checkbox twitter-bootstrap

我试图在下拉列表中放置一个复选框表格,如下所示:

<ul>
  <li class="dropdown">
    <a href="#" data-toggle="dropdown" class="dropdown-toggle">
      Dropdown Form<b class="caret"></b>
    </a>
    <ul class="dropdown-menu">
      <li><label class="checkbox"><input type="checkbox">Two</label></li>
      <li><label class="checkbox"><input type="checkbox">Two</label></li>
    </ul>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

这是Bootply中演示

但是,正如您在演示中所看到的,无论出于何种原因,实际的复选框本身都显示在下拉菜单之外.任何人都可以告诉我是什么原因造成的,以及应该如何实施?如果我拿出标签类它可以工作,但它都是成束的.

Kyl*_*Mit 21

这是我们将要构建的内容:

演示

HTML

基本上,我们将结合两组不同的Bootstrap控件和样式:DropdownCheckboxes.在每个内部li,我们将使用a label而不是a元素,以便我们可以将复选框包装在标签中并使整个行可单击.

<ul class="dropdown-menu checkbox-menu allow-focus">
  <li >
    <label>
      <input type="checkbox"> Cheese
    </label>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

CSS

我们可以窃取一些通常应用的样式.dropdown-menu li a,输入并将它们应用到我们的标签选项中.我们将使标签占据容器的整个宽度并修复一些标签/复选框对齐问题.此外,我们将添加样式.active:hover.

.checkbox-menu li label {
    display: block;
    padding: 3px 10px;
    clear: both;
    font-weight: normal;
    line-height: 1.42857143;
    color: #333;
    white-space: nowrap;
    margin:0;
    transition: background-color .4s ease;
}
.checkbox-menu li input {
    margin: 0px 5px;
    top: 2px;
    position: relative;
}

.checkbox-menu li.active label {
    background-color: #cbcbff;
    font-weight:bold;
}

.checkbox-menu li label:hover,
.checkbox-menu li label:focus {
    background-color: #f5f5f5;
}

.checkbox-menu li.active label:hover,
.checkbox-menu li.active label:focus {
    background-color: #b8b8ff;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的

其他一些家务,我们将手动.active在每个列表项上保留一个类标志,以对应是否检查该项目,以便我们可以适当地设置它.

$(".checkbox-menu").on("change", "input[type='checkbox']", function() {
   $(this).closest("li").toggleClass("active", this.checked);
});
Run Code Online (Sandbox Code Playgroud)

我们还希望允许菜单在内部点击事件中保持打开状态,通过阻止事件冒泡来允许多项选择

$(document).on('click', '.allow-focus', function (e) {
  e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)

堆栈片段中的演示

$(".checkbox-menu").on("change", "input[type='checkbox']", function() {
   $(this).closest("li").toggleClass("active", this.checked);
});

$(document).on('click', '.allow-focus', function (e) {
  e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)
body {
  padding: 15px;
}

.checkbox-menu li label {
    display: block;
    padding: 3px 10px;
    clear: both;
    font-weight: normal;
    line-height: 1.42857143;
    color: #333;
    white-space: nowrap;
    margin:0;
    transition: background-color .4s ease;
}
.checkbox-menu li input {
    margin: 0px 5px;
    top: 2px;
    position: relative;
}

.checkbox-menu li.active label {
    background-color: #cbcbff;
    font-weight:bold;
}

.checkbox-menu li label:hover,
.checkbox-menu li label:focus {
    background-color: #f5f5f5;
}

.checkbox-menu li.active label:hover,
.checkbox-menu li.active label:focus {
    background-color: #b8b8ff;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script>



<div class="dropdown">
  <button class="btn btn-default dropdown-toggle" type="button" 
          id="dropdownMenu1" data-toggle="dropdown" 
          aria-haspopup="true" aria-expanded="true">
    <i class="glyphicon glyphicon-cog"></i>
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu checkbox-menu allow-focus" aria-labelledby="dropdownMenu1">
  
    <li >
      <label>
        <input type="checkbox"> Cheese
      </label>
    </li>
    
    <li >
      <label>
        <input type="checkbox"> Pepperoni
      </label>
    </li>
    
    <li >
      <label>
        <input type="checkbox"> Peppers
      </label>
    </li>
    
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 对于 bootstrap 5,将 data-toggle 更改为 data-bs-toggle 并将停止传播处理程序更改为 $('.allow-focus).on('click', function(e) { e.stopPropagation(); }); (5认同)

Jim*_*oot 6

Bootstrap在其文档中使用复选框的方式如下:

<div class="checkbox">
    <label>
        <input type="checkbox">Two
    </label>
</div>
Run Code Online (Sandbox Code Playgroud)

所以你的样子:

<ul>
    <li class="dropdown">
        <a href="#" data-toggle="dropdown" class="dropdown-toggle">Dropdown Form<b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li>
                <div class="checkbox">
                    <label>
                        <input type="checkbox">Two
                    </label>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <label>
                        <input type="checkbox">Two
                    </label>
                </div>
            </li>
        </ul>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

docs:http : //getbootstrap.com/css/#forms


小智 5

我认为一个简单的解决方案是,

<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" 
id="sampleDropdownMenu" data-toggle="dropdown">
Dropdown
</button>
<div class="dropdown-menu">
<button class="dropdown-item" type="button">
 <input type="checkbox">Action
 </button>
<button class="dropdown-item" type="button">
 <input type="checkbox">Action
</button>
<button class="dropdown-item" type="button">
  <input type="checkbox">Action
</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)