1

私のフォームには4つのフィールドがあります。必要なもの:
-少なくとも1つのフィールドが入力されている場合に成功するための検証
-すべてのフィールドに同じエラーを使用するには「電話または電子メールを入力してください」

以下のコードは連続して機能しません。関数を使用してすべてを一度にチェックしても、すべてのフィールドが個別に検証されます。私は何が間違っているのですか?

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を爆発させます。

検証が失敗したときに4つのエラーが表示されるのではなく、単一のエラーメッセージをグループに添付する方法を知りたい。

4

3 に答える 3

0

少なくとも1つのフィールドが入力されている場合に成功する検証

ルールが成功するのは、すべてのフィールドに値がある場合のみです(AND演算子を使用しているため)。1つで十分な場合は、OR演算子を使用します

var rule = function (el) {
  return
    $("#CustomerEmail").val() ||
    $("#CustomerMobile").val() ||
    $("#CustomerWork").val() ||
    $("#CustomerHome").val();
  };
于 2013-01-01T18:32:35.830 に答える
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);
    }
})

デモ: http://jsfiddle.net/UzjZM/1/

于 2013-01-01T21:29:37.257 に答える
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 配列とエラー メッセージを変更するだけで、要素の任意のグループに対して機能します。

于 2013-01-02T00:05:59.013 に答える