1

jQuery 検証プラグインを使用しており、プラグインが有効または無効な入力を検出したときに独自のコードを実行したいと考えています。

必要な2 つ.validate()のオプションはsuccessshowErrorsであり、両方を単独で動作させることができることがわかりました。

var validator = $('#form').validate({
  rules: {
    name: "required",
    email: {
      required: true,
      email: true
    }
  },
success: function() {
  console.log('success');
}

success有効な入力が行われるたびにログに記録します。また、showErrors正しく動作します:

var validator = $('#form').validate({
  rules: {
    name: "required",
    email: {
      required: true,
      email: true
    }
  },
showErrors: function() {
  console.log('error');
}

しかし、2つを結合しようとするとerror、入力が有効かどうかに関係なく毎回ログに記録されます:

var validator = $('#form').validate({
  rules: {
    name: "required",
    email: {
      required: true,
      email: true
    }
  },
success: function() {
  console.log('success');
},
showErrors: function() {
  console.log('error');
}

オプションの順序は影響しません。

2 つのオプションが連携しない理由と、有効な入力と無効な入力に対して独自の関数を実行する方法を知っている人はいますか?

4

2 に答える 2

3

「showErrors」は、エラーが検出されたときだけ呼び出されるのではなく、入力した値に関係なく、入力を変更するたびに呼び出されます。

「showErrors」は、「errorMap」と「errorList」の 2 つのパラメーターを受け取ります。本当にエラーがあったかどうかを確認するには、これらの値のいずれかを確認する必要があります。

showErrors: function(errorMap, errorList) {
  if (errorsList.length > 0) {
    console.log('error');
  }
}

現在のバリデータ コンテキストで呼び出されるため、showErrors 関数内で「成功」イベントを処理することもできます。

showErrors: function(errorMap, errorList) {
  if (errorsList.length == 0) {
    this.currentElements.addClass("success");
  }
}
于 2014-05-23T12:25:39.837 に答える
1

それを考え出した...ちょっと。

に置き換えshowErrorsましたhighlight。これにより、有効または無効なエントリでコールバックを実行できます。

ただし、プラグインはまだデフォルトのエラー メッセージを表示します。おそらく、何もしていないためですshowErrors。そのため、各フィールドのメッセージに空の文字列を設定してハックする必要がありました。

var validator = $('#form').validate({
  rules: {
    name: "required",
    email: {
      required: true,
      email: true
    }
  },
  messages: {
    name: '',
    email: ''
  },
  success: function() {
    console.log('success');
  },
  highlight: function() {
    console.log('highlight');
  }
}

確かに私が望むほどきれいではないので、誰かがより良い方法を持っていればそれは素晴らしいことです.

于 2013-09-01T04:16:56.137 に答える