jQuery验证不触发

时间:2015-06-02 23:35:50

标签: jquery jquery-validate

我有以下html和js,但它没有触发文本输入字段模糊或表单提交的jquery.validate验证。如果我添加" required"直接归属于文本输入字段,默认错误消息反而出现。任何人都可以帮我弄清楚为什么以下不起作用?

<!doctype html>
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.validate.min.js"></script>
<script type="text/javascript" src="jquery.validate.unobtrusive.min.js"></script>

</head>
<body>
    <form id="test" action="test.html" method="post">
        <input type="text" name="txtName" />    
        <input type="submit" name="btnSubmit" />
    </form>
</body>
</html>
<script type="text/javascript">
    $(document).ready(function(){
        ValidateForm();

    });

    function ValidateForm(){
        $.validator.unobtrusive.parse($("form"));

        $('#test').validate({
            rules: {
                "txtName": "required"
            },
            messages: {
                "txtName": "this name is required for sure!"
            },
            errorPlacement: function (error, element) {
                $(element).parent().append(error);
            },
            onfocusout: function (element) { this.element(element); }
        });
    }
</script>

1 个答案:

答案 0 :(得分:1)

<script type="text/javascript" src="jquery.validate.unobtrusive.min.js"></script>

为什么要包含unobtrusive插件?

您自己调用unobstrusive方法时无法同时使用.validate()插件。

为什么?

因为unobtrusive插件会根据HTML属性自动构建并调用.validate()方法。

由于插件仅使用对.validate()的第一次调用来初始化验证,因此它会自动忽略所有后续调用。因此,您对.validate()的调用完全被忽略了。

  

如果我添加&#34;必需&#34;直接到文本输入字段,默认错误消息开始了。

由于unobtrusive插件,jQuery Validate完全忽略了对.validate()的调用。这就是为什么它仅在您将required元素放在input元素中时才有效。

完全删除unobtrusive插件,效果很好:

<强> http://jsfiddle.net/ocx864nu/