JQuery验证未捕获的TypeError:无法读取未定义的属性"设置"

use*_*526 12 jquery jquery-validate jquery-mobile

我在JQuery Mobile表单上使用JQuery Validate,该表单具有listview,其中包含动态创建的Auto Complete选项.

如果您尝试在验证处于活动状态时键入自动完成字段,则会出现此错误.

我可以看到问题与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>
Run Code Online (Sandbox Code Playgroud)

Spa*_*rky 44

您的整个问题是由listview()函数创建的动态HTML引起的.检查DOM会发现这会动态创建一个新<form>容器.由于你已经放置listview<form>容器中,你现在已经<form></form>嵌套在内<form></form>,这是非常无效的HTML,以及jQuery Validate插件如此出乎意料地工作的全部原因.

解决方案是将listview元素放在<form>容器之外.