Skip to content

Commit 53e11b8

Browse files
authored
fix(AutoComplete): trigger onBlur when clicking outside (#5476)
* fix(AutoComplete): should trigger onBlur when click body * chore: bump version 9.4.3-beta02 * perf: 优化性能 * refactor: Esc 优化性能 * refactor: 更新 blur 事件 * refactor: Search 组件更新 * refactor: 精简逻辑代码 * refactor: 移除 menu click 提高性能
1 parent 88ca87b commit 53e11b8

File tree

5 files changed

+19
-14
lines changed

5 files changed

+19
-14
lines changed

src/BootstrapBlazor/BootstrapBlazor.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>9.4.3-beta01</Version>
4+
<Version>9.4.3-beta02</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
data-bs-toggle="@ToggleString" data-bs-placement="@PlacementString"
1111
data-bs-offset="@OffsetString" data-bs-custom-class="@CustomClassString"
1212
data-bb-auto-dropdown-focus="@ShowDropdownListOnFocusString" data-bb-debounce="@DurationString"
13-
data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString"
13+
data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" data-bb-blur="@TriggerBlurString"
1414
data-bb-scroll-behavior="@ScrollIntoViewBehaviorString"
1515
value="@CurrentValueAsString"
1616
placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement"/>

src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ export function init(id, invoke) {
3737
})
3838
}
3939

40+
EventHandler.on(input, 'blur', e => {
41+
el.classList.remove('show');
42+
const triggerBlur = input.getAttribute('data-bb-blur') === 'true';
43+
if (triggerBlur) {
44+
invoke.invokeMethodAsync('TriggerBlur');
45+
}
46+
});
47+
4048
EventHandler.on(input, 'focus', e => {
4149
const showDropdownOnFocus = input.getAttribute('data-bb-auto-dropdown-focus') === 'true';
4250
if (showDropdownOnFocus) {
@@ -46,14 +54,6 @@ export function init(id, invoke) {
4654
}
4755
});
4856

49-
EventHandler.on(menu, 'click', e => {
50-
el.classList.remove('show');
51-
if (el.triggerEnter !== true) {
52-
invoke.invokeMethodAsync('TriggerBlur');
53-
}
54-
delete el.triggerEnter;
55-
});
56-
5757
EventHandler.on(input, 'change', e => {
5858
invoke.invokeMethodAsync('TriggerChange', e.target.value);
5959
});
@@ -113,17 +113,17 @@ const handlerKeyup = (ac, e) => {
113113
if (!skipEnter) {
114114
const current = menu.querySelector('.active');
115115
if (current !== null) {
116-
el.triggerEnter = true;
117116
current.click();
117+
input.blur();
118118
}
119119
invoke.invokeMethodAsync('EnterCallback', input.value);
120120
}
121121
}
122122
else if (key === 'Escape') {
123123
const skipEsc = el.getAttribute('data-bb-skip-esc') === 'true';
124124
if (skipEsc === false) {
125-
EventHandler.trigger(menu, 'click');
126125
invoke.invokeMethodAsync('EscCallback');
126+
input.blur();
127127
}
128128
}
129129
else if (key === 'ArrowUp' || key === 'ArrowDown') {
@@ -172,7 +172,7 @@ export function dispose(id) {
172172
}
173173
}
174174
EventHandler.off(input, 'keyup');
175-
EventHandler.off(menu, 'click');
175+
EventHandler.off(input, 'blur');
176176
Input.dispose(input);
177177
}
178178
}

src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs

+5
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ public abstract class PopoverCompleteBase<TValue> : BootstrapInputBase<TValue>,
101101
/// </summary>
102102
protected string? SkipEnterString => SkipEnter ? "true" : null;
103103

104+
/// <summary>
105+
/// 获得 是否跳过 Blur 处理字符串
106+
/// </summary>
107+
protected string? TriggerBlurString => OnBlurAsync != null ? "true" : null;
108+
104109
/// <summary>
105110
/// 获得 滚动行为字符串
106111
/// </summary>

src/BootstrapBlazor/Components/Search/Search.razor

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
data-bs-toggle="@ToggleString" data-bs-placement="@PlacementString"
2727
data-bs-offset="@OffsetString" data-bs-custom-class="@CustomClassString"
2828
data-bb-auto-dropdown-focus="@ShowDropdownListOnFocusString" data-bb-debounce="@DurationString"
29-
data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString"
29+
data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" data-bb-blur="@TriggerBlurString"
3030
data-bb-scroll-behavior="@ScrollIntoViewBehaviorString"
3131
data-bb-input="@UseInputString"
3232
value="@_displayText"

0 commit comments

Comments
 (0)