Eu tenho o menu suspenso Bootstrap 5 abaixo de caixas de seleção rotuladas , com data-bs-auto-close="outside"
, para que o menu feche com um clique externo.
<div class="dropdown">
<button type="button" class="btn btn-success dropdown-toggle" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu">
<div class="px-1">
<input class="form-check-input" type="checkbox" id="option1" name="filter">
<label for="option1">Option 1</label>
</div>
<div class="px-1">
<input class="form-check-input" type="checkbox" id="option2" name="filter">
<label for="option2">Option 2</label>
</div>
<div class="btn-group px-1 mt-2 w-100">
<button onclick="closeFilter()" type="button" class="apply btn btn-sm btn-success">Apply</button>
<button onclick="closeFilter()" type="button" class="reset btn btn-sm btn-success">Reset</button>
</div>
</div>
</div>
Quero que o menu feche quando qualquer um dos botões "Aplicar" e "Redefinir" for clicado. Para isso, tenho a função abaixo:
function closeFilter() {
let dropDown = event.target.closest('.dropdown');
let dropDownButton = dropDown.querySelector('.dropdown-toggle');
dropDownButton.style.border = '1px solid red';
dropDownButton.dropdown('toggle');
}
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" />
<div class="dropdown">
<button type="button" class="btn btn-success dropdown-toggle" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu">
<div class="px-1">
<input class="form-check-input" type="checkbox" id="option1" name="filter">
<label for="option1">Option 1</label>
</div>
<div class="px-1">
<input class="form-check-input" type="checkbox" id="option2" name="filter">
<label for="option2">Option 2</label>
</div>
<div class="btn-group px-1 mt-2 w-100">
<button onclick="closeFilter()" type="button" class="apply btn btn-sm btn-success">Apply</button>
<button onclick="closeFilter()" type="button" class="reset btn btn-sm btn-success">Reset</button>
</div>
</div>
</div>
No entanto, a função acima gera o erro:
dropDownButton.dropdown is not a function
Onde está o meu erro?
Para fazer isso você terá que definir explicitamente o elemento dropDownButton como um menu suspenso Bootstrap
e depois você poderá usar o
toggle
método nesteVocê precisa obter a instância do menu suspenso específico. Você pode usar
bootstrap.Dropdown.getInstance(element)
para isso.