我有一个成员管理页面,客户希望总是需要一个字段,如果用户是成员,那么它必须是一个电子邮件地址。如果该帐户是管理员,则不必是电子邮件。我的第一个想法是,“简单。函数()就像我有时需要字段一样。”
我正在使用JQuery验证插件。这就是问题所在。
ename: { required: true, email: function() { var retVal = ($("#mem_rights").val() == 4); alert(retVal); return retVal; }},
警报是调试代码,它显示该功能正在正确评估。当我在管理页面上时,它评估为false但我仍然收到输入框旁边的错误消息,如果我将值设为非电子邮件地址,请输入“请输入有效的电子邮件地址”。
我需要做什么?
答案 0 :(得分:1)
不幸的是,没有规则,但required
默认采用依赖函数或表达式。
这是通过覆盖默认的email
规则(或添加一个具有您自己选择的名称)的规则来实现的,这样就可以使用依赖函数。
var oldEmail = $.validator.methods.email;
$.validator.addMethod("email", function(value, element, param) {
return !param || oldEmail.call(this, value, element);
});
$("#test").validate({
rules: {
field: {
required: true,
email: {
depends: function () {
return $("#require-email").is(":checked");
}
}
}
}
});
示例: http://jsfiddle.net/rvsDs/
如果您对覆盖默认email
规则(有效问题)感到紧张,可以将新规则命名为conditionalemail
或类似名称。
答案 1 :(得分:0)
根据文档,required
属性也可以是dependency expression或dependency callback,您可以使用它来执行条件要求。你可能会写这样的东西:
ename: {
required: function(el) {
return $("#mem_rights").val() == 4;
}
}
虽然如果值没有改变,不需要函数,只需计算如下表达式:
ename: { required: ($("#mem_rights").val() == 4) }