尝试使用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) { ... } }); 

这里的问题是onfocusoutonkeyupsuccess不是“规则”。 只有单个“规则”和messages选项可以放在.rules('add')方法中。

 $('#username').rules("add", { required: true, email: true, remote: { ... }, messages: { remote: "custom remote message" } }); 

请参阅.rules()方法的文档: http : //jqueryvalidation.org/rules

onfocusoutonkeyupsuccess是仅在.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不是“事件”。 “事件”是clickbluronfocusout等( onkeyuponfocusoutonclick是控制此插件事件的选项)

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/

使用remotedataFiltermessages参数,如下所示:

 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' } } }); 

});