如何validationhtml5 Datalist的输入?

我想知道如何validation来自Datalist的输入值。 我的意思是,如果我有一个Datalist ,用户可以开始写一个值,然后从Datalist选择它,但是用户决定不从列表中选择任何值,并且他提交的表单中包含不完整的值,发送的价值将是错误的。

我想过迭代Datalist所有元素,但我认为如果Datalist值超过1.000并且我不知道任何其他方法来validation它,这不是一个好主意。

这是我要使用的Datalist一个例子:

         

试试这个:

  

并在表格提交,你可以检查

 var val=$("#txt").val(); var obj=$("#colours").find("option[value='"+val+"']") if(obj !=null && obj.length>0) alert("valid"); // allow form submission else alert("invalid"); // don't allow form submission 

如果你使用jQuery find方法,它会遍历DOM树,试图找到正确的元素,同时考虑到它的一个属性的值,并查看你的评论,我认为你关注性能。

关于迭代所有选项并检查value属性的第一个想法是更好(谈论性能),而不是遍历DOM树,寻找在其中一个属性中具有特定值的元素( 查看此比较 )。 您需要注意, 较短的代码更快的代码不同

更快的解决方案是在开始时生成一个字符串array ,并在validation过程中搜索其中的正确值:

 //---At the beginning of your application let list = Array.prototype.map.call(document.getElementById("colours").options, (option) => option.value); //---Later in your validation process if (list.indexOf(value) < 0) { //Invalid } 

另一个更快的解决方案是在开始时生成一个object并将其用作哈希映射 ,在validation过程中检查其中的正确值:

 //---At the beginning of your application let hashmap = Array.prototype.reduce.call(document.getElementById("colours").options, (obj, option) => { if (!obj[option.value]) { obj[option.value] = true; } return obj; }, {}); //---Later in your validation process if (!hashmap[value]) { //Invalid } 

这里有jsperf中比较的四种方法:

1 - 您的第一个想法(迭代所有Datalist选项)

2 - 使用jQuery查找方法(@nsthethunderbolt解决方案)

3 - 在开头创建一个strings array ,并在validation过程中搜索Array中的值

4 - 在开头创建哈希映射,并在validation过程中检查值是否为true

https://jsperf.com/test-best-method-to-search-inside-a-datalist