我有一个带有以下验证设置的表单:
$('#form').validate({
onfocusout: false,
onkeyup: false,
onclick: false,
success: function (){
$('#username').addClass('input-validation-confirmation');
}
});
$('#username').rules("add", {
onfocusout: false,
onkeyup: false,
required: true,
email: true,
remote: {
url: function,
type: 'GET',
dataType: 'json',
traditional: true,
data: {
username: function () {
return $('#username').val();
}
},
dataFilter: function (responseString) {
var response = jQuery.parseJSON(responseString);
currentMessage = response.Message;
if (response.State == 0) {
currentMessage = currentMessage + 0;
return false;
}
return 'true';
},
beforeSend: function (response) {
showLoadingIndicator($('#username'));
},
complete: function () {
hideLoadingIndicator($('#username'));
}
}
});
这是尝试做的是使用相同的验证元素(为了与其他框架一起使用)来显示错误和成功方法。
我的问题是我的规则的成功方法在远程验证完成之前被触发。我尝试了几种方式设置消息,但似乎没有在验证成功时调用自定义消息参数。
当使用远程和模式验证规则的混合时,有没有人知道使用验证错误字段同时成功和错误消息的其他方法?
修改
我现在明白我期待在错误的时间成功举办。我需要一个验证完成后触发的事件(未提交)。有没有这样的事件?
答案 0 :(得分:7)
您的代码......
$('#username').rules("add", {
onfocusout: false,
onkeyup: false,
required: true,
email: true,
remote: { ... },
messages: { ... },
success: function (label) { ... }
});
此处的问题是onfocusout
,onkeyup
和success
不是“规则”。只有单独的“规则”和messages
选项可以放在.rules('add')
方法中。
$('#username').rules("add", {
required: true,
email: true,
remote: { ... },
messages: {
remote: "custom remote message"
}
});
请参阅.rules()
方法的文档:http://jqueryvalidation.org/rules
onfocusout
,onkeyup
和success
是仅在.validate()
方法内部的“选项”,该方法仅附加到<form>
元素。
至于remote
:As per the docs的“自定义”消息,此错误消息将自动成为从您的服务器返回的消息...没有特殊设置。
根据评论编辑并更新OP:
您的代码:
$('#form').validate({
onfocusout: false,
onkeyup: false,
onclick: false,
success: function (){
$('#username').addClass('input-validation-confirmation');
}
});
你说,“仍然,有了更新的代码(见上文)我从未见过成功事件。”
您已停用此表单上的所有活动。触发此字段验证的唯一事件是单击提交按钮。 时,您是否希望“看到”success
关闭?
DEMO :http://jsfiddle.net/xMhvT/
换句话说,submit
是您在禁用所有其他事件时触发验证测试的唯一事件。
根据另一项OP更新进行编辑:
“我现在明白我期待在错误的时间成功举办。我 需要一个验证完成后触发的事件(不是 提交)。有没有这样的事件?“
success
不是“事件”。 “事件”是click
,blur
,keyup
等。(onkeyup
,onfocusout
和onclick
是控制事件的选项对于这个插件)
success
是一个“回调函数”。 “回调函数”就是在事件中发生的事情。
•如果您需要每次字段通过验证时触发的“回调函数”,则可以使用success
。
•如果您需要在表单通过验证时触发的“回调函数”,则可以使用submitHandler
。但是,这也是在提交表单时。
•如果您想“测试”整个表单或单个字段以查看它是否有效而未提交表单,则可以使用.valid()
“方法”。
$('#username').valid(); // for one field
// or
$('#form').valid(); // for the whole form
// you can also...
if ($('#form').valid()) {
//do something if form is valid
}
此方法将触发测试(显示消息)并返回布尔值。
答案 1 :(得分:6)
使用dataFilter
,messages
和var message = 'Default error message';
$('form').validate({
rules: {
element1: {
remote: {
url: '/check',
type: 'post',
cache: false,
dataType: 'json',
data: {
element2: function() {
return $('.element2').val();
}
},
dataFilter: function(response) {
response = $.parseJSON(response);
if (response.status === 'success') return true;
else {
message = response.error.message;
return false;
}
}
}
}
},
messages: {
element1: {
remote: function(){ return message; }
}
}
});
参数,如下所示:
export const router: Routes = [
{ path: '', redirectTo: 'index', pathMatch: 'full' },
{ path: 'index', component: Component1 },
{ path: 'page2', component: Component2 },
{ path: 'page3', component: Component3 }
];
答案 2 :(得分:1)
我迟到了回答这个问题,但我认为这可能有助于其他人:
在你的php中只需要添加以下内容
if($rows_matched==1){
echo (json_encode(false));
}
else{
echo (json_encode(true));
}
并在你的js代码中写下以下内容: $(函数(){
$('#product_add').validate({
rules:{
product_sku:{
remote:{
url:'check.php',
type:'POST'
}
}
},
messages:{
product_sku:{
remote:'already in database'
}
}
});
});
答案 3 :(得分:0)
dataFilter: function(response) {
response = $.parseJSON(response);
if (response.status === 'success') return true;
else {
message = response.error.message;
return false;
}
}