【问题标题】:jQuery Validation Plugin not showing custom messagesjQuery 验证插件不显示自定义消息
【发布时间】:2015-03-05 20:51:07
【问题描述】:

尝试创建类似于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"),它也可以工作,但它只显示标准消息。我想使用我创建的自定义的,但没有显示出来。

【问题讨论】:

  • 请永远不要在问题中修复您的代码......它会使答案变得毫无用处。但是,请随意附加新信息。谢谢。

标签: jquery jquery-validate


【解决方案1】:

我已经检查了十亿次语法,找不到任何错误。

没有这样的规则称为minLength。这就是您的“未定义”错误的根源。

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 定义。

【讨论】:

  • 啊,好吧,我认为这将是我的一些愚蠢的疏忽。你先生是救命稻草!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
相关资源
最近更新 更多