我有一个表单,我使用远程验证来检查数据库中是否已存在电子邮件地址。但是,问题在于,在此表单上,用户可以在几个不同的“组”之间进行选择,每个组都有自己独特的电子邮件地址集(因此每个组中可以存在一次相同的电子邮件)。
组选择是表单上的下拉列表,电子邮件地址是带有远程验证的输入字段。我有几个问题。首先,我已经设置了这样的远程规则:
remote: {
url: 'remote_script.php',
data: { group_id: $('select.group_id').val() }
}
但是,这似乎将group_id参数静态设置为select中的第一个值。意思是,如果我更改选择,然后再次触发远程验证,则group_id参数不会更改
首先,如何使此参数动态化,具体取决于表单中选择的值?
其次,如何在电子邮件地址字段中手动触发远程验证?当group_id select更改时,我想在电子邮件地址字段上重新触发远程验证(不更改字段的值)。我尝试使用
$(selector).validate().element('.email_addr')
但这似乎只会触发标准验证(必需,电子邮件),而不是远程调用。
答案 0 :(得分:37)
找到我问题第二部分的解决方案:
$(".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
});
此处找到了解决方案:solution
我的问题的第一部分最初由@Jeffery To
回答所有需要做的就是将参数的值更改为函数,而不仅仅是值。 Jeffery的例子将在下面复制给未来的googlers:
remote: {
url: 'remote_script.php',
data: {
group_id: function () {
return $('select.group_id').val();
}
}
}
答案 1 :(得分:8)
从远程second example开始,看起来函数(在验证期间评估)可以用于数据,所以
remote: {
url: 'remote_script.php',
data: {
group_id: function () {
return $('select.group_id').val();
}
}
}
应该有用。
对于第二个问题,您是否尝试将验证规则传递给validate()
?