diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 42e81f0df11..6002af5822f 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 9.4.3-beta01 + 9.4.3-beta02 diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor index 694aebd702d..04416dc2b20 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor @@ -10,7 +10,7 @@ data-bs-toggle="@ToggleString" data-bs-placement="@PlacementString" data-bs-offset="@OffsetString" data-bs-custom-class="@CustomClassString" data-bb-auto-dropdown-focus="@ShowDropdownListOnFocusString" data-bb-debounce="@DurationString" - data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" + data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" data-bb-blur="@TriggerBlurString" data-bb-scroll-behavior="@ScrollIntoViewBehaviorString" value="@CurrentValueAsString" placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement"/> diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js index 875d30aeed4..7a3cf927171 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js @@ -37,6 +37,14 @@ export function init(id, invoke) { }) } + EventHandler.on(input, 'blur', e => { + el.classList.remove('show'); + const triggerBlur = input.getAttribute('data-bb-blur') === 'true'; + if (triggerBlur) { + invoke.invokeMethodAsync('TriggerBlur'); + } + }); + EventHandler.on(input, 'focus', e => { const showDropdownOnFocus = input.getAttribute('data-bb-auto-dropdown-focus') === 'true'; if (showDropdownOnFocus) { @@ -46,14 +54,6 @@ export function init(id, invoke) { } }); - EventHandler.on(menu, 'click', e => { - el.classList.remove('show'); - if (el.triggerEnter !== true) { - invoke.invokeMethodAsync('TriggerBlur'); - } - delete el.triggerEnter; - }); - EventHandler.on(input, 'change', e => { invoke.invokeMethodAsync('TriggerChange', e.target.value); }); @@ -113,8 +113,8 @@ const handlerKeyup = (ac, e) => { if (!skipEnter) { const current = menu.querySelector('.active'); if (current !== null) { - el.triggerEnter = true; current.click(); + input.blur(); } invoke.invokeMethodAsync('EnterCallback', input.value); } @@ -122,8 +122,8 @@ const handlerKeyup = (ac, e) => { else if (key === 'Escape') { const skipEsc = el.getAttribute('data-bb-skip-esc') === 'true'; if (skipEsc === false) { - EventHandler.trigger(menu, 'click'); invoke.invokeMethodAsync('EscCallback'); + input.blur(); } } else if (key === 'ArrowUp' || key === 'ArrowDown') { @@ -172,7 +172,7 @@ export function dispose(id) { } } EventHandler.off(input, 'keyup'); - EventHandler.off(menu, 'click'); + EventHandler.off(input, 'blur'); Input.dispose(input); } } diff --git a/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs b/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs index a4f189e5165..466a54973b3 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs @@ -101,6 +101,11 @@ public abstract class PopoverCompleteBase : BootstrapInputBase, /// protected string? SkipEnterString => SkipEnter ? "true" : null; + /// + /// 获得 是否跳过 Blur 处理字符串 + /// + protected string? TriggerBlurString => OnBlurAsync != null ? "true" : null; + /// /// 获得 滚动行为字符串 /// diff --git a/src/BootstrapBlazor/Components/Search/Search.razor b/src/BootstrapBlazor/Components/Search/Search.razor index 38049461d0f..5831bb583bf 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor +++ b/src/BootstrapBlazor/Components/Search/Search.razor @@ -26,7 +26,7 @@ data-bs-toggle="@ToggleString" data-bs-placement="@PlacementString" data-bs-offset="@OffsetString" data-bs-custom-class="@CustomClassString" data-bb-auto-dropdown-focus="@ShowDropdownListOnFocusString" data-bb-debounce="@DurationString" - data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" + data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" data-bb-blur="@TriggerBlurString" data-bb-scroll-behavior="@ScrollIntoViewBehaviorString" data-bb-input="@UseInputString" value="@_displayText"