8
votes

JQuery Validation - Afficher le résumé de la validation pendant la validation désireuse?

est-il possible d'obtenir la validation de JQuery pour afficher le résumé de validation à l'aide de la validation désireuse?

J'utilise MVC 3 (si cela compte) et mes formulaires valident lorsque chaque élément perd la mise au point: P>

@using (Ajax.BeginForm(...))
{

  <div class="field-panel">
    @Html.EditorFor(m => m.PatientID)
    ...

  </div>
  <input type="submit" class="carecon-button-next" value="Next" />
  @Html.ValidationSummary(null, new { @class = "validation-summary" })
}


2 commentaires

Vous impliquez que vous avez déjà un «résumé de validation» ... Comment générez-vous cela? Il n'est pas montré nulle part dans votre code.


Ajouté le reste du code de page ..


3 Réponses :


1
votes

Ceci est depuis le page de démonstration ; Le InvalidHandler et le code pour créer un résumé d'erreur. Mais il est déclenché sur Soumettre qui n'est pas ce que vous avez demandé. xxx

Cependant, le ErrorLabelContainer: méthode ne nécessite pas formulaire soumission. selon la documentation , "Toutes les étiquettes d'erreur sont affichées dans une liste non ordonnée avec L'ID "MessageBox", comme spécifié par le sélecteur passé comme option ErrorContainer. Tous les éléments d'erreur sont emballés dans un élément LI, pour créer une liste de messages. " xxx

Voici une démonstration brute montrant la validation à l'aide de Onfocusout . Il n'y a pas de bouton de soumission pour prouver ce point. Le #messagsbox accumule tous les messages tels qu'ils sont collectés.

http://jsfiddle.net/sparky672/ban2q/


3 commentaires

J'ai essayé de définir le paramètre ErrorLabelContainer à mon résumé div, mais en vain, il ne montre toujours que les erreurs dans le conteneur sur soumettre.


@Qwerty: Voir la démo j'ai ajouté à ma réponse. Il n'a même pas de bouton d'envoi.


Merci pour la démo !! Il a énormément contribué à déterminer que ce problème était vraiment avec MVC 3 ..



7
votes

OK, je pense que je pensais cela.

Le problème est en réalité dû à l'utilisation de la validation non obstrissante avec MVC 3, puisque l'initialisation de la validation de JQuery pour vous. Ainsi, le seul moyen de configurer la validation consiste à utiliser form.data ("validator"). Paramètres code>. Cependant, essayer de définir le ErrorLabelContainer code> via cette méthode, c'est-à-dire: p> xxx pré>

... ne fonctionne pas, car la validation de JQuery n'utilise que cette valeur Initialement init () Fonction, pour configurer un groupe d'autres paramètres tels que des conteneurs, etc. J'ai essayé d'émiter ce qu'il fait, ou même appeler $ ("# formulaire"). Données ("validateur"). Initial ( ) code> à nouveau après avoir défini le ErrorLabelContainer Code>, mais ce faisant ainsi causer un comportement étrange et une bande d'autres paramètres. P>

J'ai donc adopté une approche différente. Premièrement, j'ai fourni une place pour MVC de mettre dans les chaînes d'erreur individuelles utilisant @ html.validationmessagefor () code> et d'ajout affichage: Aucune code> Pour le garder caché: P > xxx pré>

puis, dans le rappel code> code>, je copie ces chaînes dans le résumé de la validation après forte> appelant défaut () CODE>: P>

    $("#form").data("validator").settings.onfocusout = function (element) { $(element).valid(); };
    $("#form").data("validator").settings.showErrors = function (errorMap, errorList) {
        this.defaultShowErrors();
        $("#error-summary").empty();
        $(".field-validation-error span", $("#form"))
            .clone()
            .appendTo("#error-summary")
            .wrap("<li>");

    };


0 commentaires

2
votes

J'avais des problèmes similaires et j'ai écrit cela, cela semble être un moyen facile d'obtenir le comportement que vous recherchez:

function EnableEagerValidation(){
    var itemsNeedingValidation = $('*[data-val="true"]');
    itemsNeedingValidation.each(function () {
        $(this).blur(function(){$(this).closest("form").valid();});
    });
}


0 commentaires