bootstrap-select
bootstrap-select copied to clipboard
Cannot clear select options
Thanks for a great plugin. I'm trying to clear and repopulate the select. Works in v. 1.13.18 but not in 1.14.0-beta3 These two lines have no effect. $(elemId).empty(); $(elemId).selectpicker('refresh');
Demo error:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Try clear bootstrap-select</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha256-wLz3iY/cO4e6vKZ4zRmo4+9XDpMcgKOvv/zEU3OMlRo=" crossorigin="anonymous">
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha256-+IZRbz1B6ee9mUx/ejmonK+ulIP5A5bLDd6v6NHqXnI=" crossorigin="anonymous"> -->
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap-select.min.css" integrity="sha256-wiMI7buOV5UBzdWN4s4kXqE/LZ794hx5oJOOIQlDBaM=" crossorigin="anonymous"> -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap-select.min.css" integrity="sha256-cwDJdubMsvIJcAYY5EXUZAuQLxSlELxFYQlxvsxdYs8=" crossorigin="anonymous">
<script>
function clearSelect(elemId, repopulate) {
$(elemId).empty();
$(elemId).selectpicker('refresh');
if (repopulate) {
var newOptionsHtml = '';
newOptionsHtml += '<option value="1">Student 1</option>';
newOptionsHtml += '<option value="2">Student 2</option>';
$(elemId).append(newOptionsHtml)
$(elemId).selectpicker('refresh');
}
}
</script>
</head>
<body>
<div class="container mt-3" style="max-width: 800px;">
<h2>Cannot clear bootstrap-select options</h2>
<div class="mb-3 mt-3">
<label for="student">Student:</label>
<select id="student" class="selectpicker">
<option value="A">Student A</option>
<option value="B">Student B</option>
</select>
</div>
<button type="button" class="btn btn-primary" onclick="clearSelect('#student', false)">Clear select</button>
<button type="button" class="btn btn-primary" onclick="clearSelect('#student', true)">Repopulate select</button>
</div>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha256-BRqBN7dYgABqtY9Hd4ynE+1slnEw+roEPFzQ7TRRfcg=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha256-lSABj6XYH05NydBq+1dvkMu6uiCc/MbLYOFGRkf3iQs=" crossorigin="anonymous"></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha256-GRJrh0oydT1CwS36bBeJK/2TggpaUQC6GzTaTQdZm0k=" crossorigin="anonymous"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap-select.min.js" integrity="sha256-qo0Cam4XJ0QQ06XnCiCFYBh3GDXU45j3lpUp+em2yBU=" crossorigin="anonymous"></script> -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap-select.min.js" integrity="sha256-obLPuLg5xxN2MC2szEaXLaN8tEKYgeCMn+TSPMxqOfE=" crossorigin="anonymous"></script>
</body>
</html>
I'm using a temporary patch https://github.com/snapappointments/bootstrap-select/issues/2738#issuecomment-1240736229
Thanks @cdcr1985 -- your work around works :)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Try clear bootstrap-select</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha256-wLz3iY/cO4e6vKZ4zRmo4+9XDpMcgKOvv/zEU3OMlRo=" crossorigin="anonymous">
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha256-+IZRbz1B6ee9mUx/ejmonK+ulIP5A5bLDd6v6NHqXnI=" crossorigin="anonymous"> -->
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap-select.min.css" integrity="sha256-wiMI7buOV5UBzdWN4s4kXqE/LZ794hx5oJOOIQlDBaM=" crossorigin="anonymous"> -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap-select.min.css" integrity="sha256-cwDJdubMsvIJcAYY5EXUZAuQLxSlELxFYQlxvsxdYs8=" crossorigin="anonymous">
<script>
function clearSelect(elemId, repopulate) {
let select = $(elemId);
select.find('option').remove(); // remove all options
if (repopulate) {
var newOptionsHtml = '';
newOptionsHtml += '<option value="1">Student 1</option>';
newOptionsHtml += '<option value="2">Student 2</option>';
$(elemId).append(newOptionsHtml)
}
select.selectpicker('destroy'); // temporary patch!
select.selectpicker(); // temporary patch!
}
</script>
</head>
<body>
<div class="container mt-3" style="max-width: 800px;">
<h2>Cannot clear bootstrap-select options</h2>
<div class="mb-3 mt-3">
<label for="student">Student:</label>
<select id="student" class="selectpicker">
<option value="A">Student A</option>
<option value="B">Student B</option>
</select>
</div>
<button type="button" class="btn btn-primary" onclick="clearSelect('#student', false)">Clear select</button>
<button type="button" class="btn btn-primary" onclick="clearSelect('#student', true)">Repopulate select</button>
</div>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha256-BRqBN7dYgABqtY9Hd4ynE+1slnEw+roEPFzQ7TRRfcg=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha256-lSABj6XYH05NydBq+1dvkMu6uiCc/MbLYOFGRkf3iQs=" crossorigin="anonymous"></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha256-GRJrh0oydT1CwS36bBeJK/2TggpaUQC6GzTaTQdZm0k=" crossorigin="anonymous"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap-select.min.js" integrity="sha256-qo0Cam4XJ0QQ06XnCiCFYBh3GDXU45j3lpUp+em2yBU=" crossorigin="anonymous"></script> -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap-select.min.js" integrity="sha256-obLPuLg5xxN2MC2szEaXLaN8tEKYgeCMn+TSPMxqOfE=" crossorigin="anonymous"></script>
</body>
</html>
this is my solution and it works: maybe could be a commit in bootstrap-select-1.14.0-beta3.js
- in bootstrap-select-1.14.0-beta3.js line (more or less) 2789 change
if (!that.multiple || maxOptions === 1) { // Deselect previous option if not multi select
if (prevData) that.setSelected(prevData, false);
that.setSelected(clickedData, true);
}
with
if (!that.multiple || maxOptions === 1) { // Deselect previous option if not multi select
//if (prevData) that.setSelected(prevData, false);
//that.setSelected(clickedData, true);
if (prevData) that.setSelected(prevData, !!state);
that.setSelected(clickedData, !state);
}