尝试使用jQuery Remote设置自定义validation消息
我有一个带有以下validation设置的表单:
$('#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')); } } });
这是尝试做的是使用相同的validation元素(为了与其他框架一起使用)来显示错误和成功方法。
我的问题是我的规则的成功方法在远程validation完成之前被触发。 我尝试了几种方式设置消息,但似乎没有在validation成功时调用自定义消息参数。
当使用远程和模式validation规则的混合时,是否有人知道使用validation错误字段的成功和错误消息的其他方法?
编辑:
我现在明白我期待在错误的时间成功举办。 我需要在validation完成后触发的事件(未提交)。 有没有这样的事件?
你的代码……
$('#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()
方法内部的“选项”,该方法仅附加到
元素。
至于远程的“自定义”消息: 根据文档 ,此错误消息将自动成为从您的服务器返回的消息…没有特殊设置。
根据评论编辑并更新OP:
你的代码:
$('#form').validate({ onfocusout: false, onkeyup: false, onclick: false, success: function (){ $('#username').addClass('input-validation-confirmation'); } });
你说, “尽管如此,通过更新的代码(见上文),我从未见过成功事件。”
您已禁用此表单上的所有活动。 触发此字段validation的唯一事件是单击提交按钮。 究竟什么时候你会“看到” success
火上浇油?
演示 : http : //jsfiddle.net/xMhvT/
换句话说,当您禁用所有其他事件时, submit
是唯一可以触发validation测试的事件。
编辑基于另一个OP更新:
“我现在明白我期待在错误的时间成功举办。我需要一个在validation完成后被解雇的事件(未提交)。有没有这样的事件?”
success
不是“事件”。 “事件”是click
, blur
, onfocusout
等( onkeyup
, onfocusout
和onclick
是控制此插件事件的选项)
success
是一种“回调function”。 “回调函数”是事件发生的事情。
•如果需要每次字段通过validation时触发的“回调函数”,则可以使用success
。
•如果需要在表单通过validation时触发的“回调函数”,则可以使用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 }
此方法将触发测试(显示消息)并返回布尔值。
演示 : http : //jsfiddle.net/xMhvT/1/
请参阅: http : //jqueryvalidation.org/valid/
使用remote
, 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; } } } });
我迟到了回答这个问题,但我认为这可能有助于其他人:
在你的PHP只需要添加以下内容
if($rows_matched==1){ echo (json_encode(false)); } else{ echo (json_encode(true)); }
并在你的js代码中编写followiing:$(function(){
$('#product_add').validate({ rules:{ product_sku:{ remote:{ url:'check.php', type:'POST' } } }, messages:{ product_sku:{ remote:'already in database' } } });
});