diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_13_AutoClose.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_13_AutoClose.razor index 79033412b..4bb9589c2 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_13_AutoClose.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_13_AutoClose.razor @@ -1,35 +1,37 @@ - - Default dropdown - - Menu item - Menu item - Menu item - - +
+ + Default dropdown + + Menu item + Menu item + Menu item + + - - Clickable outside - - Menu item - Menu item - Menu item - - + + Clickable outside + + Menu item + Menu item + Menu item + + - - Clickable inside - - Menu item - Menu item - Menu item - - + + Clickable inside + + Menu item + Menu item + Menu item + + - - Manual close - - Menu item - Menu item - Menu item - - + + Manual close + + Menu item + Menu item + Menu item + + +
\ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_14_Methods.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_14_Methods.razor index 85d7034b6..9b16514a2 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_14_Methods.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/Dropdowns/Dropdown_Demo_14_Methods.razor @@ -1,20 +1,40 @@ - - Dropdown button - - Action - Another action - Something else here - - +
+
+ + Dropdown button + + Action + Another action + Something else here + + - - - + + +
+
-@code{ +
+
+ + Dropdown button + + Action + Another action + Something else here + + + + +
+
+ +@code { private Dropdown dropdown1 = default!; + private Dropdown dropdown2 = default!; private async Task ShowAsync() => await dropdown1.ShowAsync(); private async Task HideAsync() => await dropdown1.HideAsync(); - private async Task ToggleAsync() => await dropdown1.ToggleAsync(); + + private async Task ToggleAsync() => await dropdown2.ToggleAsync(); } diff --git a/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs b/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs index 86074c61d..e86fdcf67 100644 --- a/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs +++ b/blazorbootstrap/Components/Dropdown/Dropdown.razor.cs @@ -89,7 +89,7 @@ protected override void OnInitialized() protected override string? ClassNames => BuildClassNames(Class, - (BootstrapClass.ButtonGroup, true), + (BootstrapClass.ButtonGroup, Split), (Direction.ToDropdownDirectionClass(), true)); /// diff --git a/blazorbootstrap/wwwroot/blazor.bootstrap.js b/blazorbootstrap/wwwroot/blazor.bootstrap.js index fa50c95de..952776f28 100644 --- a/blazorbootstrap/wwwroot/blazor.bootstrap.js +++ b/blazorbootstrap/wwwroot/blazor.bootstrap.js @@ -399,48 +399,60 @@ window.blazorBootstrap = { dropdown: { dispose: (elementId) => { let dropdownEl = document.getElementById(elementId); - if (dropdownEl != null) - bootstrap?.Dropdown?.getOrCreateInstance(dropdownEl)?.dispose(); + if (dropdownEl != null) { + let toggleEl = dropdownEl.querySelector('[data-bs-toggle="dropdown"]') ?? dropdownEl; + bootstrap?.Dropdown?.getOrCreateInstance(toggleEl)?.dispose(); + } }, hide: (elementId) => { let dropdownEl = document.getElementById(elementId); - if (dropdownEl != null) - bootstrap?.Dropdown?.getOrCreateInstance(dropdownEl)?.hide(); + if (dropdownEl != null) { + let toggleEl = dropdownEl.querySelector('[data-bs-toggle="dropdown"]') ?? dropdownEl; + bootstrap?.Dropdown?.getOrCreateInstance(toggleEl)?.hide(); + } }, initialize: (elementId, dotNetHelper) => { let dropdownEl = document.getElementById(elementId); if (dropdownEl == null) return; - dropdownEl.addEventListener('hide.bs.dropdown', function () { + let toggleEl = dropdownEl.querySelector('[data-bs-toggle="dropdown"]') ?? dropdownEl; + + toggleEl.addEventListener('hide.bs.dropdown', function () { dotNetHelper.invokeMethodAsync('bsHideDropdown'); }); - dropdownEl.addEventListener('hidden.bs.dropdown', function () { + toggleEl.addEventListener('hidden.bs.dropdown', function () { dotNetHelper.invokeMethodAsync('bsHiddenDropdown'); }); - dropdownEl.addEventListener('show.bs.dropdown', function () { + toggleEl.addEventListener('show.bs.dropdown', function () { dotNetHelper.invokeMethodAsync('bsShowDropdown'); }); - dropdownEl.addEventListener('shown.bs.dropdown', function () { + toggleEl.addEventListener('shown.bs.dropdown', function () { dotNetHelper.invokeMethodAsync('bsShownDropdown'); }); - bootstrap?.Dropdown?.getOrCreateInstance(dropdownEl); + bootstrap?.Dropdown?.getOrCreateInstance(toggleEl); }, show: (elementId) => { let dropdownEl = document.getElementById(elementId); - if (dropdownEl != null) - bootstrap?.Dropdown?.getOrCreateInstance(dropdownEl)?.show(); + if (dropdownEl != null) { + let toggleEl = dropdownEl.querySelector('[data-bs-toggle="dropdown"]') ?? dropdownEl; + bootstrap?.Dropdown?.getOrCreateInstance(toggleEl)?.show(); + } }, toggle: (elementId) => { let dropdownEl = document.getElementById(elementId); - if (dropdownEl != null) - bootstrap?.Dropdown?.getOrCreateInstance(dropdownEl)?.toggle(); + if (dropdownEl != null) { + let toggleEl = dropdownEl.querySelector('[data-bs-toggle="dropdown"]') ?? dropdownEl; + bootstrap?.Dropdown?.getOrCreateInstance(toggleEl)?.toggle(); + } }, update: (elementId) => { let dropdownEl = document.getElementById(elementId); - if (dropdownEl != null) - bootstrap?.Dropdown?.getOrCreateInstance(dropdownEl)?.update(); + if (dropdownEl != null) { + let toggleEl = dropdownEl.querySelector('[data-bs-toggle="dropdown"]') ?? dropdownEl; + bootstrap?.Dropdown?.getOrCreateInstance(toggleEl)?.update(); + } } }, googlemaps: {