使用jQueryvalidation器的valid()或element()方法与远程方法

jQuery validator valid()方法( http://jqueryvalidation.org/valid )检查所选表单是否有效或所有选定元素是否有效。

jQuery validator element()方法( http://jqueryvalidation.org/Validator.element/ )validation单个元素,如果有效则返回true,否则返回false。

但是,使用远程方法时,第一次检查表单时,两种方法都错误地指示元素通过validation。

如何使用valid()element()与远程validation方法?

https://stackoverflow.com/a/3884995/1032531提供了一个解决方案,但它与当前版本的jQuery Validator无法正常工作。 在异步调用运行时, element()不再返回undefined ,因为this.check( checkElement ) !== false (v1.13.1的第​​423行)只返回truefalse 。 因此,可以任意暂停100毫秒,但不检查这是否是正确的时间量。

顺便说一句,我提出这个问题的原因是我希望使用jQueryValidator进行内联编辑。 https://jsfiddle.net/vctt9utd/显示除远程方法之外的工作示例。

     Testing    $(function(){ var validator=$("#myForm").validate({ rules: { bla: { minlength:2, maxlength:4, required:true, remote: "validate.php" } }, messages: { bla: { remote:"error message" } } }); $('#testit').click(function(){ $('#bla').val('test'); console.log($('#bla').valid()); console.log(validator.element('#bla')); }) });    

有点黑客,但它似乎工作。 我不喜欢它如何启动两个ajax请求。 我想我可以动态更改规则以从validation器规则中删除远程方法,但是,我需要手动添加消息。 从技术上来说,我的应用程序,我不需要显示消息,但我使用return input.next().html(); 获取https://jsfiddle.net/vctt9utd/中显示的消息。

http://jsfiddle.net/msprwad5/

 
var validator = $("#myForm").validate({ rules: { myelement: { minlength: 2, maxlength: 4, required: true, remote: { url: "/echo/html/", type: "POST", data: { html: 0, delay: .5 } } } }, messages: { myelement: { remote: "error message" } } }); $('#testit').click(function () { if ($('#myelement').valid()) { $.post("/echo/html/", { html: 0, delay: .5 }, function (status) { if(!+status){alert('failed remote validation');} }); } else {alert('failed normal validation if first attempt, otherwise could be either.');} })