3

我有一个简单的登录表单,并让 jQuery 验证在显示错误时替换字段标签。问题是,一旦错误被清除,标签就会消失。我想找到一种方法来恢复到以前标签的内容,或者在该字段有效时重建该标签......

这是我的代码:

$(document).ready(function(){
    $("#login").validate({
        errorPlacement: function(error, element) {
            element.prev().replaceWith(error);
        },
        rules: {
            "email": {
                required: true,
                email:true,
            },
            "password": {
                required: true,
                minlength: 6
            }
        },
        messages: {
            email: {
                required: "Please enter your email address.",
                email: "Please enter a <u>valid</u> email address"
            },
            password: {
                required: "Please enter your password.",
                minlength: "Please enter a password with 6 characters or more."
            }
        },
    });
});

和 HTML:

<form name="login" id="login" method="post" action="authenticate.php">
<p>
    <label for="email">Email Address:</label>
    <input type="text" name="email" id="email" class="required email" />
</p>
<p>
    <label for="password">Password:</label>
    <input type="password" name="password" id="password" class="required" />
</p>
<p>
    <input type="submit" value="Log In" id="submit" />
</p>

本质上,当用户提交表单时,如果电子邮件字段中没有数据,那么电子邮件的标签就会被错误替换。但是一旦它有有效的输入,我想放回原来的标签。

在此先感谢您的任何建议,

Z

4

3 回答 3

3

我实际上制定了一个折衷方案,而不是用错误标签替换以前的标签,而是使用 error.appendTo(element.prev()) 和 errorElement: "span" 将跨度附加到该标签中。这是新代码:

            $(document).ready(function(){
            $("#login").validate({
                errorElement: "span",
                errorPlacement: function(error, element) {
                    error.appendTo(element.prev());
                    //element.prev().replaceWith(error);
                },
                rules: {
                    "email": {
                        required: true,
                        email:true,
                    },
                    "password": {
                        required: true,
                        minlength: 6
                    }
                },
                messages: {
                    email: {
                        required: " is Required",
                        email: " is Improperly Formatted"
                    },
                    password: {
                        required: " is Required",
                        minlength: " is not Long Enough"
                    }
                },
            });
        });

它不太理想,但至少当跨度出现时,错误代码是我想要的,当它消失时,标签保持不变。我只是这样做了,所以标签和错误像句子一样相互补充......例如,“电子邮件地址”“是必需的。” 或“电子邮件地址”“格式不正确。”

感谢所有在这里做出贡献的人,

Z

于 2012-06-19T17:25:28.020 回答
1

你可以删除

errorPlacement: function(error, element) {
         element.prev().replaceWith(error);
     }, 

并且消息应该出现在文本框旁边。

于 2012-06-19T02:45:04.627 回答
0

您可以尝试删除Child(标签),并在错误发生时附加一个新的。切换标签似乎有意义

于 2012-06-19T02:38:04.813 回答