jQuery 验证插件未显示自定义消息

jQuery Validation Plugin not showing custom messages

试图创建类似于 documentation example 的注册表单,但无法正常工作。在 Chrome Inspector 中显示 "jquery.validate.js:640 Uncaught TypeError: Cannot read property 'call' of undefined" 但我无法理解该代码。

实际上电子邮件字段有点用...

这是 HTML:

<html>

    <head>
        <meta charset="utf-8">
        <title>Register</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="css/quickipedia.css">
        <script src="http://code.jquery.com/jquery.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        <script src="js/jquery.validate.js"></script>
        <script src="js/register.js"></script>

    </head>

    <body class="q-site-background">

        <div id="q-banner"></div>       

            <div id="q-login">

                <form class="form-horizontal" id="registrationForm" role="form" action="register.php" method="post">
                    <div class="row">
                        <div class="col-span-4 col-md-offset-4">
                            <h2 class="form-horizontal-heading">Register</h2>
                        </div>
                    </div>
                    <br/>

                    <div class="form-group">    
                        <label for="username" class="control-label col-sm-4">Username: </label>
                        <div class="col-sm-8">
                            <input type="text" class="form-control" id="username" name="username" placeholder="Username" autofocus >
                        </div>  
                    </div>

                    <div class="form-group">    
                        <label for="password" class="control-label col-sm-4">Password: </label>
                        <div class="col-sm-8">
                            <input type="password" class="form-control" id="password" name="password" placeholder="Password" >
                        </div>
                    </div>

                    <div class="form-group">    
                        <label for="confirm_password" class="control-label col-sm-4">Confirm Password: </label>
                        <div class="col-sm-8">
                            <input type="password" class="form-control" id="confirm_password" name="confirmPassword" placeholder="Confirm Password" >
                        </div>
                    </div>

                    <div class="form-group">    
                        <label for="email" class="control-label col-sm-4">Email: </label>
                        <div class="col-sm-8">
                            <input type="email" class="form-control" id="email" name="email" placeholder="Email">
                        </div>
                    </div>

                    <div class="form-group">    
                        <label for="confirm_email" class="control-label col-sm-4">Confirm Email: </label>
                        <div class="col-sm-8">
                            <input type="email" class="form-control" id="confirm_email" name="confirmEmail" placeholder="Confirm Email" >
                        </div>
                    </div>

                    <button id="#register" class="btn btn-lg btn-primary btn-block q-button col-span-4" type="submit">Create Account</button>

              </form>

              <br/>

        </div>  

    </body>

</html>

和register.js:

$(document).ready(function() {

    $("#registrationForm").validate({
        rules:{
            username:{
                required:true,
                minLength:4
            },
            password:{
                minLength:6,
                required:true
            }, 
            confirm_password:{
                minLength:6,
                required:true,
                equalTo:"#password"
            }, 
            email:{
                required:true,
                email:true
            },
            confirm_email:{
                required:true,
                email:true,
                equalTo:"#email"
            }
        },
        messages:{
            username:{
                required:"Please enter a username",
                minLength:"Username must be at least 4 characters long"
            },
            password:{
                required:"Please enter a password",
                minLength:"Password must be at least 6 characters"
            },
            confirm_password:{
                required:"Please confirm password",
                minLength:"Password must be at least 6 characters",
                equalTo:"Passwords do not match"
            },
            email:"Please enter an email",
            confirm_email:{ 
                required:"Please confirm email",
                equalTo:"Emails do not match"
            }
        }
    });
});

我已经检查了十亿次语法,没有发现任何错误。此外,如果我包含 HTML 输入属性(例如 required minLength="6" equalTo="#password"),它会起作用,但这只会显示标准消息。我想使用我创建的自定义的但没有显示。

I've checked over the syntax a billion times and can't find any errors.

没有名为 minLength 的规则。这就是你的 "undefined" 错误的根源。

It's minlength(注意准确拼写)

$("#registrationForm").validate({
    rules: {
        username: {
            required: true,
            minlength: 4
        },
        ....

你这里也会有问题...

confirm_email: {  // <- THIS IS SUPPOSED TO BE THE NAME ATTRIBUTE
    required:true,
    email:true,
    equalTo:"#email"
}

rules 选项中的规则由字段的 name 属性定义,而非 由其 id