【发布时间】:2020-01-24 16:14:51
【问题描述】:
我正在增强(在角度指令中)谷歌放置自动完成输入以选择第一个选项(如果没有选择)。
我正在使用下面的代码,当使用“tab”或“enter”键时,它就像一个魅力。
不幸的是,它不适用于带有 virtualkeyboard “next” 键的 android 设备(chrome)...
这个“next”键的 KeyCode 可能是什么,因为它既不是“tab”(9)也不是“enter”(13)
selectFirstOnEnterOrTab(input) {
// prevent submit on enter (13)
$(input).keydown(function (e) {
if (e.which === 13 && $('.pac-container:visible').length) {
return false;
}
});
// store the original event binding function
const _addEventListener = (input.addEventListener) ? input.addEventListener : input.attachEvent;
function addEventListenerWrapper(type, listener) {
// Simulate a 'down arrow' keypress on hitting 'return' when no pac suggestion is selected,
// and then trigger the original listener.
if (type === 'keydown') {
const orig_listener = listener;
listener = function (event) {
const suggestion_selected = $('.pac-item-selected').length > 0;
if ((event.which >= 9 && event.which <= 13) && !suggestion_selected) {
const simulated_downarrow = $.Event('keydown', {
keyCode: 40, which: 40
});
orig_listener.apply(input, [simulated_downarrow]);
}
orig_listener.apply(input, [event]);
};
}
_addEventListener.apply(input, [type, listener]); // add the modified listener
}
if (input.addEventListener) {
input.addEventListener = addEventListenerWrapper;
} else if (input.attachEvent) {
input.attachEvent = addEventListenerWrapper;
}
}
编辑
按照 Pitto 的建议,我已经在我的 android 设备上记录了哪个键和键码,并且对于我按下的所有键,我都会收到 229,这显然是 android 的正常行为。 关于如何更新代码以使其也能在 Android 设备上运行的任何想法...
EDIT2
在 android 上,按下“下一个”时,不会触发 keydown 事件
【问题讨论】:
标签: javascript angular virtual-keyboard