bootstrap-select 在 Bootstrap 下拉菜单中不起作用
bootstrap-select not working inside of Bootstrap dropdown menu
我正在尝试将 bootstrap-select Library 中的多选输入放入 Bootstrap 下拉菜单中。问题是,当我打开 Bootstrap 下拉菜单并单击多选输入时,下拉菜单关闭,似乎无法使用下拉菜单中的输入。
在下拉菜单之外,输入工作正常,但如果下拉菜单打开,它会在我单击多选输入时立即关闭,即使多选输入位于 Bootstrap 下拉菜单
如何让它工作,所以当我点击下拉菜单中的多选输入时,下拉菜单保持打开状态,我可以自由选择多选输入中的任何选项?
这是我的代码 (JSFiddle):
<div class="dropdown mb-4 text-dark" id="myDD">
<a class="btn dropdown-toggle text-muted btn-block btn-grey py-2 font-weight-bold "
style="color: black !important; font-size: .8em;" href="#" role="button"
id="dropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
data-display="static">
<i class="fas fa-sliders-h mr-2"></i> Menu
</a>
<div class="dropdown-menu bg-transparent border-0 mt-2"
aria-labelledby="dropdownMenuLink"
style="position: relative; float: none;">
<form>
<div class="input-group mb-3">
<label for="inputGroupSelect05"
class="text-dark d-block w-100 mb-1">Input text</label>
<input type="text" class="form-control form-control-sm" placeholder="text input">
</div>
<div class="input-group mb-3 multi-select ">
<label for="inputGroupSelect02" class="text-dark d-block w-100 mb-1">Click causes close of dropdown</label>
<select style="color: #495057 !important;" class="w-100" multiple data-selected-text-format="count" data-style="custom-select custom-select-sm" id="test-select">
<option>1</option>
<option>2</option>
<option selected>3</option>
<option selected>4</option>
<option selected>5</option>
</select>
</div>
</form>
</div>
</div>
我已经尝试使用 JQuery 的许多解决方案来解决相关问题,但我无法使它们中的任何一个起作用。有人知道我能做什么吗?
您的 select-box 会打开,但菜单会隐藏,因此要避免这种情况,可以手动控制 opening/closing 菜单。因此,无论何时单击菜单 add/remove class show 来自 dropdown
以及来自 dropdown-menu
.
演示代码 :
$(document).ready(function() {
$('#test-select').selectpicker();
$('#test-select2').selectpicker();
//onclick of dropdown toggle
$('#myDD > a.dropdown-toggle').on('click', function(event) {
$(this).parent().toggleClass('show')//addor remove class
$(this).attr('aria-expanded', $(this).attr('aria-expanded') == 'false' ? 'true' : 'false'); //add true or false
$("div[aria-labelledby=" + $(this).attr('id') + "]").toggleClass('show') //add class/remove
});
$('body').on('click', function(e) {
//check if the click occur outside `myDD` tag if yes ..hide menu
if (!$('#myDD').is(e.target) &&
$('#myDD').has(e.target).length === 0 &&
$('.show').has(e.target).length === 0
) {
//remove clases and add attr
$('#myDD').removeClass('show')
$('#myDD > a').attr('aria-expanded', 'false');
$("#myDD").children('div.dropdown-menu').removeClass('show')
}
});
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/css/bootstrap-select.min.css">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/js/bootstrap-select.min.js"></script>
<div class="dropdown mb-4 text-dark" id="myDD">
<a class="btn dropdown-toggle text-muted btn-block btn-grey py-2 font-weight-bold " style="color: black !important; font-size: .8em;" href="#" role="button" id="dropdownMenuLink" aria-haspopup="true" aria-expanded="false" data-display="static">
<i class="fas fa-sliders-h mr-2"></i> Menu
</a>
<div class="dropdown-menu bg-transparent border-0 mt-2" aria-labelledby="dropdownMenuLink" style="position: relative; float: none;">
<form>
<div class="input-group mb-3">
<label for="inputGroupSelect05" class="text-dark d-block w-100 mb-1">Input text</label>
<input type="text" class="form-control form-control-sm" placeholder="text input">
</div>
<div class="input-group mb-3 multi-select ">
<label for="inputGroupSelect02" class="text-dark d-block w-100 mb-1">Click causes close of dropdown</label>
<select style="color: #495057 !important;" class="w-100" multiple data-selected-text-format="count" data-style="custom-select custom-select-sm" id="test-select">
<option>1</option>
<option>2</option>
<option selected>3</option>
<option selected>4</option>
<option selected>5</option>
</select>
</div>
</form>
</div>
</div>
<div class="input-group mb-3 multi-select ">
<label for="inputGroupSelect02" class="text-dark d-block w-100 mb-1">Click causes close of dropdown if open</label>
<select style="color: #495057 !important;" class="w-100" multiple data-selected-text-format="count" data-style="custom-select custom-select-sm" id="test-select2">
<option>1</option>
<option>2</option>
<option selected>3</option>
<option selected>4</option>
<option selected>5</option>
</select>
</div>
Bootstrap select 不再支持 Bootstrap 5,因此请改用 multiple-select 库。 https://multiple-select.wenzhixin.net.cn/examples
*除了上面的备选,bootstrap-select now has Bootstrap 5 support if you were to upgrade your code snippet to use BS5. The current compatible version to use is v1.14.0-beta2. I see Swati also removed data-toggle
for you - any further data-*
attributes must be changed to data-bs-*
for BS5 (further info here;在撰写本文时,这不适用于 bootstrap-select 属性,例如data-live-search
保持原样。
我正在尝试将 bootstrap-select Library 中的多选输入放入 Bootstrap 下拉菜单中。问题是,当我打开 Bootstrap 下拉菜单并单击多选输入时,下拉菜单关闭,似乎无法使用下拉菜单中的输入。
在下拉菜单之外,输入工作正常,但如果下拉菜单打开,它会在我单击多选输入时立即关闭,即使多选输入位于 Bootstrap 下拉菜单
如何让它工作,所以当我点击下拉菜单中的多选输入时,下拉菜单保持打开状态,我可以自由选择多选输入中的任何选项?
这是我的代码 (JSFiddle):
<div class="dropdown mb-4 text-dark" id="myDD">
<a class="btn dropdown-toggle text-muted btn-block btn-grey py-2 font-weight-bold "
style="color: black !important; font-size: .8em;" href="#" role="button"
id="dropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
data-display="static">
<i class="fas fa-sliders-h mr-2"></i> Menu
</a>
<div class="dropdown-menu bg-transparent border-0 mt-2"
aria-labelledby="dropdownMenuLink"
style="position: relative; float: none;">
<form>
<div class="input-group mb-3">
<label for="inputGroupSelect05"
class="text-dark d-block w-100 mb-1">Input text</label>
<input type="text" class="form-control form-control-sm" placeholder="text input">
</div>
<div class="input-group mb-3 multi-select ">
<label for="inputGroupSelect02" class="text-dark d-block w-100 mb-1">Click causes close of dropdown</label>
<select style="color: #495057 !important;" class="w-100" multiple data-selected-text-format="count" data-style="custom-select custom-select-sm" id="test-select">
<option>1</option>
<option>2</option>
<option selected>3</option>
<option selected>4</option>
<option selected>5</option>
</select>
</div>
</form>
</div>
</div>
我已经尝试使用 JQuery 的许多解决方案来解决相关问题,但我无法使它们中的任何一个起作用。有人知道我能做什么吗?
您的 select-box 会打开,但菜单会隐藏,因此要避免这种情况,可以手动控制 opening/closing 菜单。因此,无论何时单击菜单 add/remove class show 来自 dropdown
以及来自 dropdown-menu
.
演示代码 :
$(document).ready(function() {
$('#test-select').selectpicker();
$('#test-select2').selectpicker();
//onclick of dropdown toggle
$('#myDD > a.dropdown-toggle').on('click', function(event) {
$(this).parent().toggleClass('show')//addor remove class
$(this).attr('aria-expanded', $(this).attr('aria-expanded') == 'false' ? 'true' : 'false'); //add true or false
$("div[aria-labelledby=" + $(this).attr('id') + "]").toggleClass('show') //add class/remove
});
$('body').on('click', function(e) {
//check if the click occur outside `myDD` tag if yes ..hide menu
if (!$('#myDD').is(e.target) &&
$('#myDD').has(e.target).length === 0 &&
$('.show').has(e.target).length === 0
) {
//remove clases and add attr
$('#myDD').removeClass('show')
$('#myDD > a').attr('aria-expanded', 'false');
$("#myDD").children('div.dropdown-menu').removeClass('show')
}
});
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/css/bootstrap-select.min.css">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/js/bootstrap-select.min.js"></script>
<div class="dropdown mb-4 text-dark" id="myDD">
<a class="btn dropdown-toggle text-muted btn-block btn-grey py-2 font-weight-bold " style="color: black !important; font-size: .8em;" href="#" role="button" id="dropdownMenuLink" aria-haspopup="true" aria-expanded="false" data-display="static">
<i class="fas fa-sliders-h mr-2"></i> Menu
</a>
<div class="dropdown-menu bg-transparent border-0 mt-2" aria-labelledby="dropdownMenuLink" style="position: relative; float: none;">
<form>
<div class="input-group mb-3">
<label for="inputGroupSelect05" class="text-dark d-block w-100 mb-1">Input text</label>
<input type="text" class="form-control form-control-sm" placeholder="text input">
</div>
<div class="input-group mb-3 multi-select ">
<label for="inputGroupSelect02" class="text-dark d-block w-100 mb-1">Click causes close of dropdown</label>
<select style="color: #495057 !important;" class="w-100" multiple data-selected-text-format="count" data-style="custom-select custom-select-sm" id="test-select">
<option>1</option>
<option>2</option>
<option selected>3</option>
<option selected>4</option>
<option selected>5</option>
</select>
</div>
</form>
</div>
</div>
<div class="input-group mb-3 multi-select ">
<label for="inputGroupSelect02" class="text-dark d-block w-100 mb-1">Click causes close of dropdown if open</label>
<select style="color: #495057 !important;" class="w-100" multiple data-selected-text-format="count" data-style="custom-select custom-select-sm" id="test-select2">
<option>1</option>
<option>2</option>
<option selected>3</option>
<option selected>4</option>
<option selected>5</option>
</select>
</div>
Bootstrap select 不再支持 Bootstrap 5,因此请改用 multiple-select 库。 https://multiple-select.wenzhixin.net.cn/examples
*除了上面的备选,bootstrap-select now has Bootstrap 5 support if you were to upgrade your code snippet to use BS5. The current compatible version to use is v1.14.0-beta2. I see Swati also removed data-toggle
for you - any further data-*
attributes must be changed to data-bs-*
for BS5 (further info here;在撰写本文时,这不适用于 bootstrap-select 属性,例如data-live-search
保持原样。