2012-11-09 20 views
10

こんにちは私はクライアント側の検証でMVC4を使用しています。これは、フィールドの隣に検証メッセージを表示するのに効果的です。'リアルタイム'の更新の要約を更新

@Html.ValidationSummary(false) 

これは動作しますが、クライアント側の「nのすべて:

私は、検証の概要を追加しました。私はそれが異なって行動することを望みます。現在、検証サマリのメッセージは、送信ボタンがクリックされたときにのみ変更されます。私はそれらを動的にして、各フィールドの検証メッセージと同様の方法で入力してください。

誰かがこれを達成する方法を提案できますか?

サマリー更新をトリガーするものについての情報は素晴らしいものです。

+0

「は、現在のメッセージを検証サマリでは、送信ボタンがクリックされたときだけ変更されます。何が起こっているかを見るために、フィドル/デモを作成してください。 – Mori

+0

フォームに検証の要約を追加すると、結果が – nixon

答えて

6

  1. アップデートをまとめのみ(ページの検証が/送信した後)、それは目に見えるだ後
  2. クリア

    :要約は、すべてが

はのバリデータ、書き換えてshowErrors()を抽出し、私たちのロジックを実装してみましょう有効であるとき、

var validator = $('form').data('validator'); 
validator.settings.showErrors = function (map, errors) { 
    this.defaultShowErrors(); 
    if ($('div[data-valmsg-summary=true] li:visible').length) { 
     this.checkForm(); 
     if (this.errorList.length) 
      $(this.currentForm).triggerHandler("invalid-form", [this]); 
     else 
      $(this.currentForm).resetSummary(); 
    } 
} 

私は、次のinit(onready)作成したサイト全体のために、このソリューションを使用していますので:

$('form').each(function() { 
    var validator = $(this).data('validator'); 
    if (validator) { 
     validator.settings.showErrors = function (map, errors) { 
      this.defaultShowErrors(); 
      if ($('div[data-valmsg-summary=true] li:visible').length) { 
       this.checkForm(); 
       if (this.errorList.length) 
        $(this.currentForm).triggerHandler("invalid-form", [this]); 
       else 
        $(this.currentForm).resetSummary(); 
      } 
     }; 
    } 
}); 

をそしてここでresetSummaryは、上記使われています:

jQuery.fn.resetSummary = function() { 
    var form = this.is('form') ? this : this.closest('form'); 
    form.find("[data-valmsg-summary=true]") 
     .removeClass("validation-summary-errors") 
     .addClass("validation-summary-valid") 
     .find("ul") 
     .empty(); 
    return this; 
}; 
+0

最初のエラーが発生したときに要約を再度表示しない点を除いて、うまく機能します。私はこれが答えとして数えることができると思う、ありがとう。 – nixon

+0

もちろん、要約を常に更新する場合は、if($( 'div [data-valmsg-summary = true] li:visible')。length)を除外できます。 –

+0

しかし、提出後にアップデートを開始し、すべてが有効であっても更新を続けたいのであれば、私はその状態を保持する必要があると思います。例えば。 '$( 'form')。data( 'updateSummary'、true);' –

1

フォーム全体が検証されたときにクライアント側の要約が生成されたように見えます。これは、valid()プラグインメソッドを呼び出すことで自分で行うことができます。これをjquery検証スクリプトの後に追加します。私が含まれている

<script> 
    $(function() { 
     $(':input').on("keyup click", function() { 
      $('form').valid(); 
     }); 
    }); 
</script> 

例のイベントは、keyUpイベントで、クリックしていますが追加またはこのスペースで区切られたリストから削除することができます。

私も次のことを考慮すると「リアルタイム」に更新するために、検証の概要を設定した
+0

になるはずです。それ以上の場合は、$( 'form')で実行できます。 );}); –

+1

は、コードを書くよりはるかに簡単ですか?なぜそれほど票が少ないのだろう? – Prageeth

関連する問題