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

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

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

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

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


如果你包括

 $('#username').val() 

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


如果你改为通过

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

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

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