jquery-validate remote验证,返回不同的消息内容
2013-04-01 09:58
375 查看
前段时间工作中遇到类似的表单验证的问题:对同一文本框进行不同的验证,返回不同的消息提示。截图如下:
1.如果会员信息不存在,提示用户 “该会员不存在”
View Code
后台Controller remote验证的方法:
remote方法返回的值是布尔类型的,所以controller中的验证方法直接返回布尔类型就可以了。这样,需求1就已经实现了。
现在用户想要加入新的需求:需要验证用户录入的会员状态是否有效。
这就需要remote方法实现对同一个输入框进行多次验证,并返回不同的消息内容。
查看了下jquery.validate.js中remote方法的源码,继续贴代码:
标粗的绿色代码,是我们需要关注的,这里返回的的response是bool类型的, 也就是之前实现需求1中,ValidateVIPName方法需要返回bool类型的原因。 想要remote方法不只是返回bool类型,还需要返回不同的消息内容,我们可以这样修改代码:
1,修改ValidateVIPName()方法:
这里返回不同的消息和bool值。
2,修改remote中的success方法,success: function(response) 这里的 response是remote请求ValidateVIPName方法返回的json数据,现在ValidateVIPName方法返回类型已经修改,所以该回调函数中的代码也要做相应的修改:
success回调函数中,将这两行代码:
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = response === true;
修改为:
var tempResponse = response;
if (tempResponse.success != undefined) {
response = tempResponse.success;
}
if (tempResponse.message != undefined) {
validator.settings.messages[element.name].remote = tempResponse.message;
} else {
validator.settings.messages[element.name].remote = previous.originalMessage;
}
var valid = response === true;
修改好代码后,需求2的功能也已经实现了。
如果大家有什么更好的方法,也可以分享下,第一次尝试写博文,不吝赐教 ^_^。
1.如果会员信息不存在,提示用户 “该会员不存在”
View Code
$(document).ready(function () { var validator = $("#VIPForm").validate({ onkeyup: false, submitHandler: function (form) { $("#VIPForm").ajaxSubmit(); }, onfocusout: function (element) { this.element(element); }, errorPlacement: function (error, element) { var elementName = element.attr('name'); error.appendTo(element.parent()); }, success: function (label, element) { var elementId = $(element).attr("id"); label.text("OK"); }, rules: { txtName: { required: true, remote: { url: "/Home/ValidateVIPName", type: "post", data: { txtName: function () { return $('#txtName').val(); } } } } }, messages: { txtName: { required: " 请输入会员名称", remote: "该会员不存在" } } }); });
后台Controller remote验证的方法:
public JsonResult ValidateVIPName() { bool success = false; string message = string.Empty; string customerName = Request["txtName"].ToString(); List<string> customers = new List<string>() { "zhangsan", "lisi", "wangwu" }; if (customers.Contains(customerName)) { success = true; } else { success = false; } return Json(success, JsonRequestBehavior.AllowGet); }
remote方法返回的值是布尔类型的,所以controller中的验证方法直接返回布尔类型就可以了。这样,需求1就已经实现了。
现在用户想要加入新的需求:需要验证用户录入的会员状态是否有效。
这就需要remote方法实现对同一个输入框进行多次验证,并返回不同的消息内容。
查看了下jquery.validate.js中remote方法的源码,继续贴代码:
remote: function(value, element, param) { if ( this.optional(element) ) return "dependency-mismatch"; var previous = this.previousValue(element); if (!this.settings.messages[element.name] ) this.settings.messages[element.name] = {}; previous.originalMessage = this.settings.messages[element.name].remote; this.settings.messages[element.name].remote = previous.message; param = typeof param == "string" && {url:param} || param; if ( previous.old !== value ) { previous.old = value; var validator = this; this.startRequest(element); var data = {}; data[element.name] = value; $.ajax($.extend(true, { url: param, mode: "abort", port: "validate" + element.name, dataType: "json", data: data, success: function(response) { validator.settings.messages[element.name].remote = previous.originalMessage; var valid = response === true; if ( valid ) { ...... } else { ...... } previous.valid = valid; validator.stopRequest(element, valid); } }, param)); return "pending"; } else if( this.pending[element.name] ) { return "pending"; } return previous.valid; },
标粗的绿色代码,是我们需要关注的,这里返回的的response是bool类型的, 也就是之前实现需求1中,ValidateVIPName方法需要返回bool类型的原因。 想要remote方法不只是返回bool类型,还需要返回不同的消息内容,我们可以这样修改代码:
1,修改ValidateVIPName()方法:
public JsonResult ValidateVIPName() { bool success = false; string message = string.Empty; string customerName = Request["txtName"].ToString(); List<string> customers = new List<string>() { "zhangsan", "lisi", "wangwu" }; if (customers.Contains(customerName)) { if (customerName != "lisi") { success = true; } else { success=false; message = "该会员状态已注销,不能录入会员信息"; } } else { success = false; message="该会员不存在"; } return Json(new { success = success, message = message }, JsonRequestBehavior.AllowGet); }
这里返回不同的消息和bool值。
2,修改remote中的success方法,success: function(response) 这里的 response是remote请求ValidateVIPName方法返回的json数据,现在ValidateVIPName方法返回类型已经修改,所以该回调函数中的代码也要做相应的修改:
success回调函数中,将这两行代码:
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = response === true;
修改为:
var tempResponse = response;
if (tempResponse.success != undefined) {
response = tempResponse.success;
}
if (tempResponse.message != undefined) {
validator.settings.messages[element.name].remote = tempResponse.message;
} else {
validator.settings.messages[element.name].remote = previous.originalMessage;
}
var valid = response === true;
修改好代码后,需求2的功能也已经实现了。
如果大家有什么更好的方法,也可以分享下,第一次尝试写博文,不吝赐教 ^_^。
相关文章推荐
- jquery-validate remote验证,返回不同的消息内容
- jQuery Validate 插件验证,,返回不同信息(json remote)自定义
- 利用struts2的json返回方式来控制jquery.validate的remote框架,进行表单验证
- JQuery validate验证规则 转载 2014年04月19日 09:19:39 6050919 //定义中文消息 var cnmsg = { required: “必选字段”, remote:
- jquery validate remote验证遇到的坑
- 在JQuery的validate功能中使用remote实现Ajax功能后台验证
- jquery-validate remote 远程校验返回非boolean类型处理
- jquery.validate验证表单,自己的js提交数据,返回json
- 将jquery validate校验框架的remote异步验证设置为同步校验
- jQuery validate验证控件remote缓存bug
- jquery.validate remote 和 自定义验证方法
- jquery.validate.js remote 数据远程验证
- jquery.validate remote 和 自定义验证方法
- jQuery validate 如何清除remote验证的缓存 (在select验证时这个bug尤为明显)
- 解决百度ueditor编辑器内容在jquery.validate中不验证问题
- jquery验证后ajax提交,返回消息如何统一显示的问题
- jquery.validate 验证消息提示 错行 调整
- jquery.validate remote 和 自定义验证方法
- jquery.validate通过remote来实现ajax验证范例
- jquery validate remote 返回错误