我正在使用jQuery验证插件,并提出了我需要为其创建远程验证规则的方案。
假设我有一个成员表单,用户可以编辑他们的个人资料,其中包含他们的电子邮件地址和从数据库填充的其他信息。显然我会使用远程方法检查电子邮件在注册时是否已经存在。问题在于,当用户不想更新他们的电子邮件地址时,但在保存表单时,验证会大惊小怪说电子邮件已经存在。
如果在表单中更改了电子邮件地址,是否可以调用远程方法。如果电子邮件保持不变,则无需验证。
以下是一个适用于其他方法的远程方法示例:
rules: {
something: {
required: true,
remote: {
param: {
url: '/path/to/file.php',
type: 'post',
data: {
'test': $('#something').val()
}
},
depends: function() {
return $('body').hasClass('someClass');
}
}
}
我原本以为我可以检查一下检查更改的规则的依赖部分,但我不知道我会怎么做
答案 0 :(得分:3)
在表单中添加一个隐藏字段,并在加载页面时将其value
设置为数据库中的原始电子邮件地址。同时给它id
以供日后参考。 (请注意,jQuery Validate插件默认会忽略所有隐藏字段。它不会被验证,因此它不需要name
属性。)
<input type="hidden" value="foo@bar.com" id="originalemail" />
您的电子邮件地址文字输入...
<input type="text" value="foo@bar.com" name="emailaddress" />
将隐藏字段的value
与value
规则的email
选项中depends
字段的remote
进行比较。< / p>
rules: {
emailaddress: { // <- assumes 'name' of field is 'emailaddress'
required: true,
email: true, // <- make sure data is a valid email address
remote: {
param: {
url: '/path/to/file.php',
type: 'post',
//data: // < do not need. Value of 'emailaddress' is sent by default.
},
depends: function(element) {
// compare email address in form to hidden field
return ($(element).val() !== $('#originalemail').val());
}
} // close remote
} // close emailaddress
} // close rules
请注意,传递到element
函数的depends
参数代表emailaddress
字段。
答案 1 :(得分:0)
保存您的电子邮件,以便在初始验证后与全局变量进行比较,然后将其与depends
中的当前值进行比较。