JQuery验证 - 逐字母验证

时间:2015-01-13 00:44:55

标签: jquery ajax jquery-mobile jquery-validate

我正在使用JQuery Validation在JQuery Mobile网站上工作以验证表单字段。 JQuery Validation向服务器发送ajax调用,以使用" remote"来验证用户输入。

有一个奇怪的现象是,第一次验证字段时,ajax调用在输入整个单词之前不会被触发。那就是我想要的。但是,当它第一次得到验证,然后在之后收到后续焦点时,每次输入一个字母时都会触发ajax调用。

有什么想法吗?这是一个错误吗?

我的代码如下:

$("#form1").validate({

            // Specify the validation rules
            rules: {
                "txt-username": {
                    required: true,
                    remote: {
                        url: "ManageAccessServlet?action=checkUsernameExist",
                        type: "get"
                    }
                },
                "txt-firstname": "required",
                "txt-lastname": "required",
                "txt-email": {
                    required: true,
                    email: true
                },
                "txt-password": {
                    required: true,
                    minlength: 6
                }
            },

            // Specify the validation error messages
            messages: {
                "txt-username": "Username cannot be empty or it has been occupied in the system",
                "txt-firstname": "Please enter your first name",
                "txt-lastname": "Please enter your last name",
                "txt-password": {
                    required: "Please provide a password",
                    minlength: "Your password must be at least 6 characters long"
                },
                "txt-email": "Please enter a valid email address"
            },

            submitHandler: function(form) {
                form.submit();
            }
        });

HTML如下:

<form action="SignupServlet" method="POST" id="form1">
            <div data-role="collapsible" id="collapPersonalDetails" data-collapsed="false">
                <h1>Personal Information</h1>
                <div class="ui-field-contain">
                    <label for="txt-username">Username</label>
                    <input type="text" name="txt-username" id="txt-username" value="">
                </div>
                <div class="ui-field-contain">
                    <label for="txt-password">Password</label>
                    <input type="password" name="txt-password" id="txt-password" value="">
                </div>

......

2 个答案:

答案 0 :(得分:0)

  

“有任何想法吗?这是一个错误吗?”

不,这不是错误。这就是插件的设计运作方式。它被称为“懒惰”验证。

首次点击表单提交按钮后 后,您将无需进行任何(required)验证。但是,在第一次“聚焦”事件后,后续数据输入尝试将触发其他验证规则。

“懒惰”验证的反义词称为“渴望”。


修改

虽然在OP中完全不清楚,但他只是想禁用onkeyup验证选项,这可以通过他自己的答案来证明。

答案 1 :(得分:0)

问题解决了。 我必须添加额外的“onkeyup:false”作为“验证”功能的选项。这可以防止在每次击键时触发验证ajax调用。验证仅在输入整个单词并且输入框失去焦点时才会发生。