如何使用jQuery远程validation依赖于表单中另一个字段的字段?
我有一个表单,我使用远程validation来检查数据库中是否已存在电子邮件地址。 然而,问题在于,在这种forms上,用户可以在几个不同的“组”之间进行选择,并且每个组具有其自己的不同的电子邮件地址集(因此相同的电子邮件可以在每个组中存在一次)。
组选择是表单上的下拉列表,电子邮件地址是具有远程validation的输入字段。 我有几个问题。 首先,我已经设置了这样的远程规则:
remote: { url: 'remote_script.php', data: { group_id: $('select.group_id').val() } }
但是,这似乎将group_id参数静态设置为select中的第一个值。 这意味着,如果我更改选择,然后再次触发远程validation,则group_id参数不会更改
首先,如何使此参数动态化,具体取决于表单中select的值?
其次,如何在电子邮件地址字段中手动触发远程validation? 当group_id select更改时,我想在电子邮件地址字段上重新触发远程validation(不更改字段的值)。 我试过用
$(selector).validate().element('.email_addr')
但这似乎只触发标准validation(必需,电子邮件),而不是远程调用。
找到我问题第二部分的解决方案:
$(".email_addr").removeData("previousValue");
将删除远程请求的缓存,并允许使用.element()再次触发远程请求。
因此我的代码如下:
$("select.group_id").change(function() { $(".email_addr").removeData("previousValue"); //clear cache when changing group $("#customer_form").data('validator').element('.email_addr'); //retrigger remote call //my validator is stored in .data() on the form });
解决方案在这里找到: 解决方案
我的问题的第一部分最初由@Jeffery To回答
所有需要做的就是将参数的值更改为函数,而不仅仅是值。 Jeffery的例子在下面复制给未来的googlers:
remote: { url: 'remote_script.php', data: { group_id: function () { return $('select.group_id').val(); } } }
从远程的第二个示例看,函数(在validation期间评估)可以用于数据,因此
remote: { url: 'remote_script.php', data: { group_id: function () { return $('select.group_id').val(); } } }
应该管用。
对于第二个问题,您是否尝试将validation规则传递给validate()
?