如何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