【发布时间】:2020-06-14 10:16:29
【问题描述】:
我有一个 html datalist 元素,我试图仅在字段中输入两个以上字符时才显示自动完成列表。在桌面上,您可以输入从 0 到无穷大的字符,输入永远不会失去焦点,并且列表显示得很好。但是,对于移动设备(特别是 iOS safari),当输入的字符长度达到 3 时,尽管输入仍然具有焦点,但光标会消失。用户必须再次点击输入以继续他的搜索。我会提到,Safari 浏览器会向用户呈现一些不相关的自动完成结果,直到达到 3 的长度。这是管理我预期行为的数据列表上的侦听器:
// Only show auto-complete results for greater than 2 characters.
searchNameInput.addEventListener('keyup', e => {
const input = e.target;
const list = input.getAttribute('data-list');
input.value.length > 2 ? input.setAttribute('list', list) : input.removeAttribute('list');
// Unrelated code (i think):
if (!input.value.length)
filtersProxy.searchName = { name: '', city: '', stateProvince: '' };
});
这是输入 3 个字符后浏览器的外观。请注意输入字段没有光标。 datalist 实际列表也尚未出现。
我尝试在每次 keyup 事件后使用 setTimeout 将焦点返回到元素,但无济于事。这把我难住了!
【问题讨论】:
-
我在 MacOS Safari 上遇到了同样的问题,这可能是一个错误,我想知道是否有黑客可以解决这个问题。
-
@jcubic a sn-p 真的很有帮助
-
@IslamElshobokshy 我的演示在这里 codepen.io/jcubic/pen/abdWvvp 这是我正在处理的代码,原始版本在这里 codepen.io/jcubic/pen/YbYpqO 如果你开始输入 foo 或 bar,它会完成标记。
标签: javascript html datalist