2

我有一个会员管理页面,客户希望始终需要一个字段,如果用户是会员,那么它必须是一个电子邮件地址。如果该帐户用于管理员,则不必是电子邮件。我的第一个想法是,“easy.function() 就像我在有时需要某个字段时所做的那样。”

我正在使用 JQuery 验证插件。这是有问题的线。

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

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

我需要做什么?

4

2 回答 2

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/

If you're nervous about overwriting the default email rule (a valid concern), you could just name the new rule conditionalemail or something similar.

于 2011-12-23T17:34:36.557 回答
0

根据文档,该required属性也可以是依赖表达式依赖回调,您可以使用它们来执行条件要求。你可能会写这样的东西:

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

虽然如果值没有改变,不需要函数,只需像这样评估一个表达式:

ename: { required: ($("#mem_rights").val() == 4) }
于 2011-12-23T17:12:03.400 回答