1

次のような2つの異なる検証に2つの異なるメッセージを使用しています

validation: {
        email: [{
            required: true,
            msg: 'Please enter Email Id.'
        }, {
            pattern: 'email',
            msg: 'Please enter valid Email id.'
        }]
    }

しかし、電子メールの値を入力せずにフォームを送信すると、最初の検証がトリガーされ、その後間違った入力をするとフォームが送信され、2番目の検証がトリガーされます。

問題は、最初の検証が削除されないことです。つまり、「電子メール ID を入力してください」と表示されます。その検証は、その横にある2番目の検証とともに2回目にトリガーされることはありません。

4

1 に答える 1

0

この検証コードはまったく問題ないように見えますが、これはパズルの 1 ピースにすぎません。Backbone.Validation の(およびその背後にあるコード) を参照することをお勧めします。この例では、同様の検証ルールを処理するための 2 つの異なるアプローチを提供します。

「基本」シナリオで電子メール検証を機能させる部分は次のとおりです。まず、テンプレートのスニペット:

  <div class="control-group">
    <label class="control-label" for="email">Email</label>
    <div class="controls">
      <input type="text" class="input-xlarge" id="email" name="email" data-error-style="inline">
    </div>
  </div>

電子メール入力では、data-error-style として「inline」が指定されていることに注意してください。これは、 backbone.validation.bootstrap.jsからのデフォルトのinvalidコールバックに作用します:

else if (control.data("error-style") === "inline"){
  if (group.find(".help-inline").length === 0){
    group.find(".controls").append("<span class=\"help-inline error-message\"></span>");
  }
  var target = group.find(".help-inline");
  target.text(error);
}

このコードは、電子メール要素にエラー メッセージを追加するか、インライン エラー メッセージが既に存在する場合はエラー テキストを置き換えます。

何が起こっているのかを把握するためにコードをさらに確認することもできますが、重要な点は、モデルの検証パラメーターはストーリーの一部に過ぎないということです。その他の部分は、テンプレートのセットアップとvalidコールinvalidバックです。

于 2013-08-16T14:33:27.153 に答える