0

すべての検証メッセージは要約に含まれている必要があるというルールがあり、メッセージは要約でコンテキストを失い、特定のフィールド インジケーターが必要になるため、デフォルトの「このフィールドは必須」ではうまくいきません。

私はかなり気に入っているソリューションを持っていますが、必要なフィールド (電子メール、URL、phoneUS などのカスタム メソッド) 以外のメッセージが必要であることがすぐに明らかになったので、関数にいくつか追加しました。

私はしばらく jQuery を使用してきましたが、最適化分野の専門家ではないので、以下の関数を最適化できるかどうかについて専門家の助けを借りたいと思っていました...私の質問は、「実際に要約でカスタム エラー メッセージを処理するより良い方法はありますか?」

$('.required, .email').each(function(index) {
  var $this = $(this);

  var label = (
    $this.is(':radio')
    ? $("label[data-name='"+$this.attr('name')+"']")
    : label = $("label[for='"+$this.attr('id')+"']")
  );

  var customMessages = [{}];

  if($this.hasClass('required')){
    customMessages.required = "'" + label.text() + "' is required.";
  }

  if($this.hasClass('email')){
    customMessages.email = "'" + label.text() + "' has an invalid email address.";
  }

  $this.rules("add", {
    messages: customMessages
  });
});

これが jsFiddle です: http://jsfiddle.net/GD5nw/1/

4

1 に答える 1

1

では、最も一般的に行われているように、各フィールドにフィールドごとにカスタム メッセージを割り当ててみませんか? あなたがやっていることよりも冗長ではないようです。

http://docs.jquery.com/Plugins/Validation/validate#toptions

、、およびとして割り当てられた属性inputを持つ要素の例。namefirstsecondaddress

$('#myform').validate({
    rules: {
        first: {
            required: true
        },
        second: {
            required: true
        },
        address: {
            required: true,
            digits: true // just an example
        }
    },
    messages: {
        first: {
            required: "your first name is required"
        },
        second: {
            required: "your last name is required"
        },
        address: {
            required: "your address is required",
            digits: "must only use digits on address"
        }
    }
});

実際のデモ: http://jsfiddle.net/x4YBw/

于 2013-01-16T16:46:21.627 に答える