autocomplete quick enter

This commit is contained in:
Yuri Kuznetsov
2025-09-25 20:20:28 +03:00
parent 3bbb54825c
commit 9ce487fc90
2 changed files with 46 additions and 0 deletions

View File

@@ -55,6 +55,7 @@ class Autocomplete {
* autoSelectFirst?: boolean,
* handleFocusMode?: 1|2|3,
* focusOnSelect?: boolean,
* catchFastEnter?: boolean,
* }} module:ui/autocomplete~options
*/
@@ -66,10 +67,33 @@ class Autocomplete {
/** @private */
this.$element = $(element);
let deferredEnter = false;
let catchEnter = false;
let catchEnterTimeout = null;
this.$element.on('keydown', e => {
if (e.code === 'Tab' && !this.$element.val()) {
e.stopImmediatePropagation();
}
// Scanner input.
if (options.catchFastEnter) {
if (e.code !== 'Enter') {
catchEnter = true;
if (catchEnterTimeout) {
clearTimeout(catchEnterTimeout);
}
catchEnterTimeout = setTimeout(() => catchEnter = false, 40);
}
if (catchEnter && e.code === 'Enter' && this.$element.val()) {
deferredEnter = true;
} else {
deferredEnter = false;
}
}
});
const lookup = options.lookupFunction ?
@@ -119,6 +143,24 @@ class Autocomplete {
e.preventDefault();
});
}
if (deferredEnter) {
setTimeout(() => {
element.dispatchEvent(
new KeyboardEvent("keydown", {
key: 'Enter',
code: 'Enter',
keyCode: 13,
which: 13,
bubbles: true,
cancelable: true
})
);
}, 100);
}
catchEnter = false;
deferredEnter = false;
},
lookup: lookup,
minChars: options.minChars || 0,
@@ -143,6 +185,9 @@ class Autocomplete {
if (options.focusOnSelect) {
this.$element.focus();
}
catchEnter = false;
deferredEnter = false;
},
triggerSelectOnValidInput: options.triggerSelectOnValidInput || false,
});

View File

@@ -709,6 +709,7 @@ class LinkFieldView extends BaseFieldView {
autoSelectFirst: true,
forceHide: true,
triggerSelectOnValidInput: false,
catchFastEnter: true,
onSelect: item => {
this.getModelFactory().create(this.foreignScope, async model => {
model.set(item.attributes);