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

时间:2014-12-16 17:01:19

标签: jquery jquery-mobile jquery-validate

我在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>

1 个答案:

答案 0 :(得分:43)

您的整个问题是由listview()函数创建的动态HTML造成的。检查DOM会发现这会动态创建一个新的<form>容器。由于您已将listview放置在<form>容器中,因此现在<form></form>嵌套在<form></form>内,这是非常无效的HTML,并且jQuery Validate插件的全部原因是意外地工作。

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