Skip to content

Commit 3d85ea6

Browse files
feat(OtpInput): support keydown event on android (#7519)
* cardupload增加删除确认属性 cardupload增加删除确认属性 * chore: bump version 10.2.1 * refactor: 移除基类更改 * feat: 增加删除确认弹窗相关参数 * Update OtpInput.razor.js 修改otpinput在安卓和鸿蒙下的输入问题 * chore: 更新脚本 * refactor: 更新代码 * revert: 撤销更改 * refactor: 增加 beforeinput 事件 * refactor: 增加传值 * revert: 移除日志 * chore: 更新条件 * feat: 实现回退逻辑 * chore: 更新代码支持 Delete --------- Co-authored-by: Argo Zhang <argo@live.ca>
1 parent 3823aff commit 3d85ea6

1 file changed

Lines changed: 51 additions & 25 deletions

File tree

src/BootstrapBlazor/Components/Input/OtpInput.razor.js

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,47 @@ import EventHandler from '../../modules/event-handler.js'
22

33
export function init(id, invoke, method) {
44
const el = document.getElementById(id);
5-
const skipKeys = ['Enter', 'Tab', 'Shift', 'Control', 'Alt'];
5+
let triggerKeydown = false;
6+
7+
EventHandler.on(el, 'beforeinput', '.bb-otp-item', e => {
8+
if (triggerKeydown) {
9+
return;
10+
}
11+
12+
processKey(el, e, e.data);
13+
});
614
EventHandler.on(el, 'input', '.bb-otp-item', e => {
715
const isNumber = e.target.getAttribute('type') === 'number';
816
if (isNumber && e.target.value.length > 1) {
917
e.target.value = e.target.value.slice(1, 2);
1018
}
1119
setValue(el, invoke, method);
12-
if (e.target.value.length === 1) {
13-
setNextFocus(el, e.target);
14-
}
1520
});
1621
EventHandler.on(el, 'keydown', '.bb-otp-item', e => {
1722
if (e.ctrlKey) {
1823
return;
1924
}
2025

21-
const isNumber = e.target.getAttribute('type') === 'number';
22-
if (skipKeys.indexOf(e.key) > -1) {
23-
24-
}
25-
else if (e.key === 'Backspace' || e.key === 'ArrowLeft') {
26-
setPrevFocus(el, e.target);
27-
}
28-
else if (e.key === 'ArrowRight') {
29-
setNextFocus(el, e.target);
26+
if (e.key.charCodeAt(0) === 0) {
27+
return;
3028
}
31-
else if (isNumber) {
32-
if ("0123456789".indexOf(e.key) > -1) {
33-
setNextFocus(el, e.target);
34-
}
35-
else {
36-
e.preventDefault();
37-
}
29+
triggerKeydown = true;
30+
processKey(el, e, e.key);
31+
});
32+
EventHandler.on(el, 'keyup', '.bb-otp-item', e => {
33+
const input = event.target;
34+
const value = e.key;
35+
36+
if (value === 'Backspace' || value === 'ArrowLeft') {
37+
setPrevFocus(el, input);
3838
}
39-
else if ("abcdefghijklmnopqrstuvwxyzABCDEDFGHIJKLMNOPQRSTUVWXYZ0123456789".indexOf(e.key) > -1) {
40-
setNextFocus(el, e.target);
39+
else if (value === 'ArrowRight') {
40+
setNextFocus(el, input);
4141
}
42-
else {
43-
e.preventDefault();
42+
else if (value === 'Delete') {
43+
setFocus(input);
4444
}
45-
});
45+
})
4646
EventHandler.on(el, 'focus', '.bb-otp-item', e => {
4747
if (e.target.select) {
4848
e.target.select();
@@ -101,9 +101,35 @@ const setFocus = target => {
101101
}, 0);
102102
}
103103

104+
const processKey = (el, event, value) => {
105+
const skipKeys = ['Enter', 'Tab', 'Shift', 'Control', 'Alt', 'Backspace', 'ArrowLeft', 'ArrowRight', 'Delete'];
106+
const input = event.target;
107+
const isNumber = input.getAttribute('type') === 'number';
108+
109+
if (skipKeys.indexOf(value) > -1) {
110+
111+
}
112+
else if (isNumber) {
113+
if ("0123456789".indexOf(value) > -1) {
114+
setNextFocus(el, input);
115+
}
116+
else {
117+
event.preventDefault();
118+
}
119+
}
120+
else if ("abcdefghijklmnopqrstuvwxyzABCDEDFGHIJKLMNOPQRSTUVWXYZ0123456789".indexOf(value) > -1) {
121+
setNextFocus(el, input);
122+
}
123+
else {
124+
event.preventDefault();
125+
}
126+
}
127+
104128
export function dispose(id) {
105129
const el = document.getElementById(id);
106130
EventHandler.off(el, 'input');
107131
EventHandler.off(el, 'keydown');
132+
EventHandler.off(el, 'keyup');
133+
EventHandler.off(el, 'beforeinput');
108134
EventHandler.off(el, 'focus');
109135
}

0 commit comments

Comments
 (0)