“具有相同错误消息的多个输入的”或者“验证”

时间:2013-01-01 18:26:08

标签: jquery jquery-validate unobtrusive-validation

我的表单有四个字段。我需要:
   - 如果至少填充一个字段,则验证成功    - 对所有字段使用相同的错误"请输入电话或电子邮件"

以下代码不能在连续的基础上运行 - 即使我使用该功能一次性检查所有字段,所有字段也会单独验证。我做错了什么?

var rule = function (el) {
//return                                        <-- old
  return (                                    //<-- new
    ($("#CustomerEmail").val() === "") &&
    ($("#CustomerMobile").val() === "") &&
    ($("#CustomerWork").val() === "") &&
    ($("#CustomerHome").val() === "")
  //;                                         <-- old
    );                                      //<-- new
  };

$("#CustomerEmail").rules("add", { required: rule });
$("#CustomerMobile").rules("add", { required: rule });
$("#CustomerWork").rules("add", { required: rule });
$("#CustomerHome").rules("add", { required: rule });

更新:

毕竟我的代码还可以,但是return在它自己的行上,这使得JS爆炸。

仍然想知道如何将单个错误消息附加到组,而不是有四个错误显示验证失败。

3 个答案:

答案 0 :(得分:0)

  如果至少填充了一个字段,

验证成功

如果所有字段都有值(因为您使用AND运算符),您的规则才会成功。如果一个人足够使用OR运算符

var rule = function (el) {
  return
    $("#CustomerEmail").val() ||
    $("#CustomerMobile").val() ||
    $("#CustomerWork").val() ||
    $("#CustomerHome").val();
  };

答案 1 :(得分:0)

这是一个首先涉及为Must_Have_One添加新验证方法的解决方案。方法name是添加到组中每个元素的匹配类,或者您可以使用rules对象来定义方法。

HTML

<input name="name" class="must_have_one" /> 

JS

var $form_group=$('.must_have_one')

$.validator.addMethod("must_have_one", function() {
    var must_have_els=$form_group.filter(function(){
        return this.value !='';
    });

    if (must_have_els.length) {
        return true;
    } else {
        return false;
    }
}, 'Must have one of .....');

var myFormValidator = $("form").validate({
    groups: {
         must_have_one : "name email"
    },
    errorPlacement: function(error, element) {       
        if (myFormValidator.groups[element.attr("name")]) {
            /* determine placement for message for group*/
            error.insertAfter($form_group.last());
        }
        else error.insertAfter(element);
    }
})

DEMO:http://jsfiddle.net/UzjZM/1/

答案 2 :(得分:0)

尽管@ charlietfl的代码有效,但这里是我原始代码的修改版本,可以使用:

var eitherors = $("#CustomerEmail, #CustomerMobile, #CustomerWork, #CustomerHome");
var message  = "Please enter either a phone number or email address";

// define the required validation rule
// will return true when all inputs are blank
var requiredRule = function (el) {
  return eitherors
    .filter(function () { return $(this).val() !== "" })
    .length === 0;
};

// define the required validation error message
// returns the error message when 1) all inputs are
// blank, and 2) only for one of the fields (I chose the first one)
var requiredMessage = function (arg, el) {
  return (requiredRule() && eitherors.first().is(el))
    ? message
    : "";
};

// use same rule and message on all the "either-or" inputs
eitherors.each(function () {
  $(this).rules("add", {
    required: requiredRule,
    messages: { required: requiredMessage }
    });
  });

这是通用的,因此仅通过更改jQuery数组和错误消息就可以处理任何元素组。