如何使用jQuery远程验证一个取决于窗体中另一个字段的字段?

我有一个表单,我使用远程验证来检查数据库中是否存在一个电子邮件地址。但是,在这种形式下,用户可以在几个不同的“组”之间进行选择,每个组都有自己独特的电子邮件地址集(因此每个组中都可以存在一个相同的电子邮件地址)。

组选择是表单上的下拉列表,电子邮件地址是具有远程验证的输入字段。我有几个问题。首先,我设置了这样的远程规则:

remote: {
    url: 'remote_script.PHP',data: {  group_id:  $('select.group_id').val() }
}

但是,这似乎是静态地将group_id参数设置为select中的第一个值。意思是,如果我更改选择,则再次触发远程验证,group_id参数不会更改

首先,我如何使这个参数动态,这取决于select中的值的形式?

其次,如何在电子邮件地址字段上手动触发远程验证?当group_id select更改时,我想在电子邮件地址字段上重新触发远程验证(不更改该字段的值)。我试过使用

$(selector).validate().element('.email_addr')

但这似乎只触发标准验证(必需的,电子邮件),而不是远程调用

解决方法

找到我的问题的第二部分的解决方案:
$(".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的例子将在下面被复制以供将来的Google员工使用:

remote: {
  url: 'remote_script.PHP',data: {
    group_id: function () {
        return $('select.group_id').val();
    }
  }
}

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...