我正在使用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>
......
答案 0 :(得分:0)
“有任何想法吗?这是一个错误吗?”
不,这不是错误。这就是插件的设计运作方式。它被称为“懒惰”验证。
首次点击表单提交按钮后 后,您将无需进行任何(required
)验证。但是,在第一次“聚焦”事件后,后续数据输入尝试将触发其他验证规则。
“懒惰”验证的反义词称为“渴望”。
修改强>:
虽然在OP中完全不清楚,但他只是想禁用onkeyup
验证选项,这可以通过他自己的答案来证明。
答案 1 :(得分:0)
问题解决了。 我必须添加额外的“onkeyup:false”作为“验证”功能的选项。这可以防止在每次击键时触发验证ajax调用。验证仅在输入整个单词并且输入框失去焦点时才会发生。