避免过滤输入元素中的datalist项

Geo*_*org 12 html5 combobox

我需要Web应用程序中的组合框行为.我遇到了以下解决方案:

<input type="text" list="options" >
<datalist id="options" >
   <option>Asterix</option>
   <option>Obelix</option>
</datalist>
Run Code Online (Sandbox Code Playgroud)

但是,只要输入任何文本,Firefox和Chrome只会向用户显示适合已输入文本的选项.在示例中,只要输入包含字母"A",浏览器就会提供Asterix作为选项但隐藏Obelix.

我想向用户显示datalist的所有条目,无论输入元素内部是什么.但是,我还想允许自定义输入.在示例中,用户应该能够进入Methusalix,当他这样做时,我想浏览器仍然显示Asterix和Obelix作为替代品.如何用HTML5实现这一目标?我敢打赌有一些选择允许这种行为,但我找不到它.

我使用它来让用户在多个配置条目之间进行选择.用户可以从现有配置条目中进行选择,也可以通过编写尚不存在的名称来创建新条目.但是,我想让用户可以随时返回现有的选项,无论他如何命名丢弃的新的.

Spl*_*iFF 6

您可以使用jQuery UI Autocomplete的自定义实现来完成此操作.

库使用自己的UI元素,因此您可以通过覆盖搜索和/或响应方法来更改下拉列表的行为,以便它始终返回所有项目.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>autocomplete demo</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.12.4.js"></script>
  <script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>

<label for="autocomplete">Select: </label>
<input id="autocomplete">

<script>
var data = [
   {label: "Item 1", value: '1'},
   {label: "Item 2", value: '2'}
];

$( "#autocomplete" ).autocomplete({
  minLength: 0,
  source: function( request, response ) {
      response( data );
  },
});
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 尽管 jQuery UI Autocomplete 确实可以工作,但不幸的是,没有输入和数据列表的设置来简单地禁用自动过滤。使用 jquery-ui 引入了我现在必须处理的具有特殊类(ui-menu、ui-menu-item)的新列表和项目。 (3认同)

oto*_*las 5

如果用户输入无关紧要,我看不出使用该datalist元素的意义。

相反,您可以选择select将显示所有选项的经典元素(即使用户将无法输入文本)。

<form>
  <select name="options">
    <option>Asterix</option>
   <option>Obelix</option>
  </select>
  <br><br>
  <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

如果您有不同的预期行为,例如首先显示一致的选项,请扩展您的问题。

  • 用户输入对于浏览器显示的选项并不重要,但仍然可以输入以前不在列表中的任何内容。 (3认同)

小智 5

您希望建议显示的方式没有在规范中描述,也不是通常在UI控件上实现自动完成或建议的方式。

正如您所建议的,我认为您只能通过使用javascript编写自己的建议UI来做您想要的事情,而不依赖于任何有关用户体验的用户代理选择。

  • 嗯,我不知道很多 UI 库的详细信息,但是 Windows API,尤其是 .NET 中的 Windows 窗体,将此作为组合框的默认选项。 (2认同)