如何创建使用远程方法的自定义规则?

时间:2014-04-23 17:15:35

标签: jquery jquery-validate

使用jQuery Validation Plugin,是否可以使用$.validator.addMethod使用remote功能创建自定义规则?

我尝试过以下代码:

$.validator.addMethod("custom-remote", function (value, element, param) {
    if (this.optional(element)) {
        return true;
    }

    return $.validator.methods.remote.call(this, value, element, {
        url: "/checkvalue",
        type: "POST",
        data: {
            valueToCheck: value
        }
    });
}, jQuery.format("{0}"));

仅在远程请求完成之前更改对输入的关注时才有效。

我不想将$.ajax()async: false一起使用,因为在这种情况下可能会造成糟糕的用户体验。

1 个答案:

答案 0 :(得分:0)

如果您想要修改版本的规则,那么您可以使用.addmethod()方法从头开始创建新规则。换句话说,你会在新方法中调用旧方法;相反,你会完全替换旧方法。

由于remote规则使用.ajax(),您可以编写remote的自定义版本以使用.ajax()


引用OP:

  

&#34;我的印象是addMethod必须立即返回,这意味着您需要将async: false与我不想做的ajax请求一起使用&#34; < / em>的

这听起来像是&#34; XY问题的经典案例&#34;:https://meta.stackexchange.com/a/66378/157574

如果您只希望remote使用async: true,或只是更改.ajax()选项,那么无需编写全新方法即可完成。任何.ajax()选项都可以非常轻松地与现有的remote方法一起使用。

文档:http://jqueryvalidation.org/remote-method/

  

&#34;您提供的任何选项都将覆盖默认值。&#34;

$( "#myform" ).validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        // change the options in here
        url: "check-email.php",
        type: "post",
        async: true,  // <- YOUR OPTION(s)
        data: {
          username: function() {
            return $( "#username" ).val();
          }
        }
      }
    }
  }
});