在某些情况下,JQuery验证插件需要电子邮件

时间:2011-12-23 16:46:43

标签: jquery validation jquery-validate email-validation required

我有一个成员管理页面,客户希望总是需要一个字段,如果用户是成员,那么它必须是一个电子邮件地址。如果该帐户是管理员,则不必是电子邮件。我的第一个想法是,“简单。函数()就像我有时需要字段一样。”

我正在使用JQuery验证插件。这就是问题所在。

ename: { required: true, email: function() { var retVal = ($("#mem_rights").val() == 4); alert(retVal); return retVal; }},

警报是调试代码,它显示该功能正在正确评估。当我在管理页面上时,它评估为false但我仍然收到输入框旁边的错误消息,如果我将值设为非电子邮件地址,请输入“请输入有效的电子邮件地址”。

我需要做什么?

2 个答案:

答案 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 expressiondependency callback,您可以使用它来执行条件要求。你可能会写这样的东西:

ename: {
  required: function(el) {
    return $("#mem_rights").val() == 4;
  }
}

虽然如果值没有改变,不需要函数,只需计算如下表达式:

ename: { required: ($("#mem_rights").val() == 4) }