javascript - 什么 Javascript 事件会导致具有列表属性的输入呈现其列表?

标签 javascript html

如果我有一个像这样的输入元素:

<input list='foo'>
<datalist id = 'foo'>some options</datalist>

是否可以使用 JavaScript 事件来延迟渲染列表,直到输入 x 个字符以及其他类似的微调操作?

我似乎无法阻止此列表的弹出。我找到了有关 native 行为的文档,但不幸的是我无法找到有关此特定问题的任何内容。

最佳答案

我认为您能够做的最接近的事情(无需编写自己的自定义组件)是根据输入中值的长度对列表进行属性和取消属性。

但这给出了好坏参半的结果。有时,在列表被归因后,您必须对输入进行散焦并重新聚焦才能开始显示。 Firefox 的行为方式是这样,但 Chrome 会使用react,无论您是否将焦点放在 <input> 上。或不。

Chrome Behaviour

const foo = document.getElementById("foo");

foo.addEventListener("input", e => {
  const hasList = foo.hasAttribute("list");
  const shouldHaveList = foo.value.length > 2;

  if (shouldHaveList && !hasList) foo.setAttribute("list", "list");
  if (!shouldHaveList && hasList) foo.removeAttribute("list");

});
<input id="foo">
<datalist id="list">
  <option value="bobby">
  <option value="sharron">
  <option value="susan">
  <option value="michael">
  <option value="gregory">
  <option value="steve">
</datalist>

关于javascript - 什么 Javascript 事件会导致具有列表属性的输入呈现其列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216520/

相关文章:

javascript - 如何检测 contenteditable div 内的 HTML 更改?

javascript - 多次调用 readystate=4 和 status=200 的 Ajax onreadystatechange 函数

javascript - 如何在单选按钮的 'checked' 属性上调用 javascript 函数?

javascript - 重定向不受支持的浏览器的最简单方法是什么?

html - twitter bootstrap - 根据最大​​列高设置列高

javascript - 链接到外部 js 时 jquery 未运行

javascript - 单击此按钮后,将一个类添加到特定类

javascript - 用vue在canvas上画图

javascript - 默认情况下如何只显示 5 个结果?

javascript - 加载新页面的过渡效果,AJAX