使用输入过滤器在长下拉列表中搜索项目,但只允许用户从下拉列表中提交选项

我的代码中有一个很长的下拉列表(超过 3k+ 选项)。由于我的下拉列表太长,我决定使用数据列表,以便用户可以通过输入更轻松地过滤下拉列表。这样他们就不必滚动浏览所有 3k 选项。

我想让它让用户可以过滤它,但不能输入/使用不在下拉列表中的值。IE 输入值将是下拉列表中的一个选项或什么都没有。我不知道该怎么做。

例如,他们可以输入颜色 John,但是一旦他们离开输入,因为 John 不在下拉列表中并且他们没有从下拉列表中选择它,一旦他们点击提交,该值就会为空。但是,如果他们搜索蓝色并单击蓝色,则输入值仍将是蓝色,因为它位于数据列表下拉选项中。

提前致谢。

   
   <form method = "POST">
   <input class="form-control" type="text" id="color"  list="colors_data" autocomplete = "off">
                            <datalist id="colors_data"style = "width:800px">
                              <option value="red"></option>
                              <option value="orange"></option>
                              <option value="green"></option>
                              <option value="blue"></option>
                            </datalist>
  <input type = "submit" value = 'send_request'>
  </form>
                            
                            

安迪

从选项值中获取所有颜色的数组,并检查是否包含您的输入值。

// Cache the elements
const options = document.querySelectorAll('option');
const form = document.querySelector('form');
const input = document.querySelector('#color');
const submit = document.querySelector('[type="submit"]');

// Add an click listener to the submit button
submit.addEventListener('click', handleSubmit, false);

// Iterate over the options with `map` and return a
// new array of colour values
const colors = Array.from(options).map(el => el.value);

function handleSubmit(e) {

  // Prevent the form from submitting
  e.preventDefault();

  // Check to see if the input value is included
  // in the colours array
  if (colors.includes(input.value)) {

    // If it is submit the form
    console.log('Found');
    // form.submit();
  } else {

    // Otherwise do nothing
    console.log('Not found');
  }
}
<input class="form-control" type="text" id="color" list="colors_data" autocomplete="off">
<datalist id="colors_data" style="width:800px">
  <option value="red"></option>
  <option value="orange"></option>
  <option value="green"></option>
  <option value="blue"></option>
</datalist>
<input type="submit" value='send_request'>

请注意,如果您不想写出所有 HTML,您可以使用数组以编程方式构建选项,并使用模板字符串创建标记。这样您就不必抓取单独的颜色数组进行检查,因为您已经有了一个。

const colors = ['red', 'orange', 'green', 'blue'];

// Iterate over the colour array to produce an array of strings
// that you then join into one string
function getOptions(arr) {
  return arr.map(el => `<option value=${el}>${el}</option>`).join('');
}

// Grab the datalist element
const datalist = document.querySelector('datalist');

// And insert the options
datalist.insertAdjacentHTML('beforeend', getOptions(colors));
<datalist />

附加文件

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在AngularJS的选择下拉列表中添加搜索过滤器

使用MVC构建ASP.NET,尝试从下拉列表创建过滤器

grouped_collection_select的过滤器下拉列表选项

基于下拉列表的搜索条件-AngularJS过滤器

使用angular从选项的下拉列表中过滤/搜索

如何限制搜索“文本输入”结果以仅返回所选“类别”过滤器下拉列表中的结果

需要帮助使搜索过滤器和下拉列表与列表中的多个值绑定

如何更改 Django 管理过滤器以使用下拉列表而不是也可以搜索的列表?

Javascript函数,用于从下拉列表选项中搜索表

如何使用 VBA 从下拉列表中过滤列表

如何从jquery.tablesorter.js中的列过滤器下拉列表中获取选定的选项

jQuery 2下拉列表,从下拉列表2中删除所选项目1

jqgrid的外部过滤器下拉列表

如何使用jQuery制作下拉列表过滤器

使用jQuery或JavaScript的下拉列表过滤器

如何从下拉列表中过滤数据?

Rails:从下拉列表中搜索年月

uigrid从下拉过滤器中删除初始空白选项

从下拉列表中显示XML项目

如何使用用户输入在 VBA 中创建过滤器/下拉菜单

使用下拉列表过滤项目

如何从下拉列表中获取所选项目并将其提交到“详细信息”视图?

使用 jqgrid 中工具栏过滤器字段中的下拉列表删除列值

MVC如何从下拉列表中提交值

如何通过Java使用Selenium Webdriver从下拉列表中提取firstselected选项的文本

角度-从带有过滤器的下拉列表中选择更多选项

Angular:使用mat-select-filter并在过滤器字段中添加图标的搜索功能的多个mat-select下拉列表

Yii2搜索过滤器下拉列表与不同的模型

网络套件已保存的搜索多选下拉列表过滤器