为什么jQuery Validate“remote:”验证需要一个函数来设置数据值?

时间:2012-08-02 16:28:05

标签: javascript jquery jquery-validate

在jQuery Validate文档中,它显示了使用远程验证调用将其他值传递给服务器端验证脚本/资源的示例:

  

http://docs.jquery.com/Plugins/Validation/Methods/remote#code

以下是示例代码:

$("#myform").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        url: "check-email.php",
        type: "post",
        data: {
          username: function() {
            return $("#username").val();
          }
        }
      }
    }
  }
});

为什么我需要使用函数来设置username数据参数?:

username: function() {
  return $("#username").val();
}

而不仅仅是:

username: $("#username").val()

我已尝试过两种方法,果然第二种方法没有为username:赋值。

我确实在remote方法函数的jQuery Validate代码中设置了一个断点:

remote: function(value, element, param) {
    ...
}

尝试了解这里发生的事情,但我真的不是更明智的。

1 个答案:

答案 0 :(得分:3)

jQuery.fn.validate(config)用于设置验证规则,而不是实际执行验证。完整地评估整个{rules: /* */ }对象。


如果你包括

$('#username').val()

在rules对象中,将立即计算该表达式,并保存该时刻的元素值。


如果您改为传递

function() { 
  return $('#username').val(); 
}

作为值,当remote validatordata属性展平为字符串时,将在调用jQuery.param并进行AJAX调用时评估此函数。

请注意,此验证器将其整个配置对象合并到它所进行的每个AJAX调用中,因此可以通过这种方式设置普通ajax设置对象中可接受的所有其他选项,而不仅仅是data