如何在jQuery中进行客户端表单验证?

mar*_*ion 1 jquery jquery-validate

我正在尝试使用此插件:http://docs.jquery.com/Plugins/Validation

其中#user_new是我的表单的id,这就是我的代码:

$('#user_new').validate({
    rules: {
        user[username]: "required",
        user[email]: {
            required: true,
            email: true
        }
    },
    messages: {
        user[username]: "Please specify your name",
        user[email]: {
            required: "We need your email address to contact you",
            email: "Your email address must be in the format of name@domain.com"
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

这些是我的输入字段在呈现页面时的外观(由Rails生成):

<input class="clearField curved" id="user_f_name" name="user[f_name]" size="30" type="text" value="First Name" /><br /> 
        <input class="clearField curved" id="user_l_name" name="user[l_name]" size="30" type="text" value="Last Name" /><br /> 
        <input class="clearField curved" id="user_username" name="user[username]" size="30" type="text" value="Username" /><br /> 
        <input class="clearField curved" id="user_password" name="user[password]" size="30" type="password" value="Password" /><br /> 
        <input class="clearField curved" id="user_password_confirmation" name="user[password_confirmation]" size="30" type="password" value="Password" /><br /> 
        <input class="clearField curved" id="user_email" name="user[email]" size="30" type="text" value="Email Address" /><br /> 
Run Code Online (Sandbox Code Playgroud)

我只是想先验证用户名和电子邮件.然后从那里拿走它.

对于我的生活,我无法弄清楚如何指定使用此插件的语法和规则.

救命!

Edit1:这是表单标记的HTML输出:

<form accept-charset="UTF-8" action="/users/login" class="user_new" id="user_new" method="post">
Run Code Online (Sandbox Code Playgroud)

关于调试的问题,当我包括它时:

$('#user_new').validate({
    debug: true,
    rules: {
        user_username: "required",
        user_email: {
            required: true,
            email: true
        }
    },
    messages: {
        user_username: "Please specify your name",
        user_email: {
            required: "We need your email address to contact you",
            email: "Your email address must be in the format of name@domain.com"
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我在JS控制台中看不到任何内容.

编辑2:当我清除我的登录数据字段并按提交时,它将不会提交.不确定这是否与validate()函数实际工作有关.但我看不到弹出的消息或类似的东西.

编辑3:似乎问题可能是ID和名称字段之间的连接不同.但是,Rails会为两个字段分配名称和ID - 因此不确定如何解决此问题.

Edit4:我找到了解决方案.我根据所选答案将其添加到评论中.

lit*_*had 5

我认为它是因为表单中的"name"属性的值(输入标记)与jquery validate选项不匹配

$('#user_new').validate({
    debug: true,
    rules: {
        user_username: "required", // should be: "user[username]"
        user_email: { // should be: "user[email]"
            required: true,
            email: true
        }
    },
    messages: {
        user_username: "Please specify your name", // should be: "user[username]"
        user_email: { // should be: "user[email]"
            required: "We need your email address to contact you",
            email: "Your email address must be in the format of name@domain.com"
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:看一下这个问题,我认为他和cakePHP中的jquery.validate有同样的问题

Edit2:编辑它显示的方式,在输入标签后面放一个容器,比方说

<div id="username_error"></div>//for username error message
Run Code Online (Sandbox Code Playgroud)

添加此代码:

$('#user_new').validate({
    debug: true,
    rules: {
        //rules
    },
    messages: {
        //messages
    },
    errorPlacement: function(error, element) {
        if ( element.is(":radio") )
            error.appendTo( element.parent().next());//if its a radio button
        else if ( element.is(":checkbox") )
            error.appendTo ( element.next() );//if its a radio button
        else
            error.appendTo( element.parent().next() );
    },//these lines of codes basically telling the jquery.validate plug-in to look for an element after
});
Run Code Online (Sandbox Code Playgroud)

然后应用一些CSS来整理一些东西

<style>
#username_error{
   //a little something something
}
</style>
Run Code Online (Sandbox Code Playgroud)

或者您可以随时查看文档以进行进一步修改

  • 伙计......非常感谢你.这个问题的答案正是如此.所以对于那些感兴趣的人......正确的答案应该是在字段名称周围加上引号.在我的例子中,确保使用Rails生成的值作为"名称".所以正确的代码看起来像:`rules {"user [username]":"required","user [email]":{required:true,email true}}`WOW ...我很高兴我发现了这个解.这一直困扰着我.我不能够感谢你.如果你想编辑你的答案以包含这个修改,我想下一个受挫的人会感谢你:) (2认同)