我在JQuery Mobile表单上使用JQuery Validate,该表单具有动态创建的自动完成选项的列表视图.
如果您尝试在验证处于活动状态时键入自动完成字段,则会出现此错误.
我可以看到问题与jQuery Mobile创建的用于保存过滤器输入的形式有关但我无法弄清楚如何通过验证字段来停止jQuery Validate.
我可以用它来重现它
JS Fiddle
(按验证,然后键入过滤器框)
任何建议赞赏
谢谢
<body>
<script>
jQuery.validator.setDefaults({
ignore: '[data-type="search"]'
});
</script>
<form>
<input required>
<ul id="ac" data-inset="true" data-filter="true" data-filter-reveal="true" data-filter-placeholder="Search cars...">
<li><a href="#">Acura</a>
</li>
<li><a href="#">Audi</a>
</li>
</ul>
<button onclick="$('#ac').attr('data-role','listview');$('#ac').listview();$('form').validate();">Validate</button>
</form>
解决方法
您的整个问题是由listview()函数创建的动态HTML引起的.检查DOM会发现这会动态创建一个新的< form>容器.由于您已将listview放在< form>中容器,你现在有< form>< / form>嵌套在< form>< / form>中,这是非常无效的HTML,以及jQuery Validate插件如此出乎意料地工作的全部原因.
解决方案是将listview元素放在< form>之外.容器.