2

在 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) {
    ...
}

试图了解这里发生了什么,但我真的一点也不聪明。

4

1 回答 1

4

jQuery.fn.validate(config)用于设置验证规则,并不实际执行验证。发生这种情况时,会准确评估整个{rules: /* */ }对象。


如果你包括

$('#username').val()

在规则对象中,将立即评估该表达式,并保存当时元素的值。


如果你改为通过

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

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

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

于 2012-08-02T17:33:04.727 回答