2014-07-02 6 views
7

Ich möchte, dass Parsley eine Eingabe nicht validiert, wenn sie nicht sichtbar ist. Ich habe eine große mehrstufige Umfrage, bei der neue Abschnitte angezeigt werden. Jeder Abschnitt hat ein eigenes Tag, und innerhalb jedes Formulars kann ich mehrere Abschnitte haben, die sich beim Durchgehen offenbaren. Ich bin derzeit 1.x, und das ist, wie ich es jetzt tun:Parsley JS 2.x - Deaktivieren der Validierung für Felder, die nicht sichtbar sind

$('#' + formID).parsley({ 
      errors : { 
       container: function(element) { 
        var $container = element.parent().find('parsley-container'); 
        if($container.length === 0) 
        { 
         if($(element).hasClass('text-hide') && !$(element).hasClass('not-select')) 
         { 
          $(element).prev().addClass('is-error'); 
         } 
         else 
         { 
          $container = $('<div class="parsley-container"></div>').insertAfter(element); 
         } 
        } 
        return $container; 
       } 
      }, 
      listeners: { 
       onFieldValidate: function(elem) { 
        if(!$(elem).is(':visible')) 
        { 
         return true; 
        } 
        return false; 
       } 
      } 

Es ist im Hörer Abschnitt ist, dass ich nur die Felder validieren, die sichtbar sind. Wie kann ich dies in Petersilie 2.x tun? Ich habe die Dokumentation durchgelesen und finde keine entsprechende Vorgehensweise. Ich weiß, dass es in 2.x Validierungsgruppen gibt, aber gibt es eine Möglichkeit, es einfach so zu machen, wie ich es in 1.x getan habe?

Antwort

11

Die einfachste Lösung ist, alle versteckten Eingänge auszuschließen, wie folgt aus:

$('#' + formID).parsley({ 
    excluded: "input[type=button], input[type=submit], input[type=reset], input[type=hidden], input:hidden" 
}); 

Auf diese Weise der Prüfung wird nur die sichtbaren Eingänge binden. Dies zwingt Sie jedoch dazu, jedes Mal, wenn eine Eingabe ihre Sichtbarkeit ändert, Petersilie zu zerstören und anzuwenden.

Um dies zu vermeiden, können Sie die folgende «nicht so elegante» Lösung verwenden. Dieser Code wäre im "petersilie: field: validate" -Ereignis besser, aber ich konnte es nicht funktionieren lassen.

Mit dem 'Petersilie: Feld: validiert' wurde die Validierung bereits durchgeführt und jetzt ändern wir das Validierungsergebnis auf 'wahr' und verstecken den Fehlercontainer. .

$('#' + formID).parsley(); 

$.listen('parsley:field:validated', function(fieldInstance){ 
    if (fieldInstance.$element.is(":hidden")) { 
     // hide the message wrapper 
     fieldInstance._ui.$errorsWrapper.css('display', 'none'); 
     // set validation result to true 
     fieldInstance.validationResult = true; 
     return true; 
    } 
}); 

Wie Petersilie von 2.1 * das Ereignis parsley:field:validated wirft die folgende Meldung

PubSub Moduls Petersilie ist veraltet; Verwenden Sie die entsprechenden jQuery Event-Methode statt

Statt parsley:field:validated Sie das Ereignis field:validated


Die neuesten Versionen $.listen() veraltet sind. verwenden sollten Sie sollten stattdessen Parsley.on() verwenden. Beispiel:

Parsley.on('field:validated', function(fieldInstance){ 
    if (fieldInstance.$element.is(":hidden")) { 
     // hide the message wrapper 
     fieldInstance._ui.$errorsWrapper.css('display', 'none'); 
     // set validation result to true 
     fieldInstance.validationResult = true; 
     return true; 
    } 
}); 
+0

Große Antwort, rettete mir eine Menge Zeit. Ich denke, es ist ziemlich elegant, wenn Sie an einem Plugin arbeiten ... – ambe5960

+0

Ich würde hinzufügen, dass Sie vorsichtig damit sein wollen, da Sie die Validierungsinstanzen löschen wollen, wenn Sie die Sichtbarkeit der versteckten Felder umschalten zurück zu sichtbar. – ambe5960

+0

@Potherca: danke für dein Update. Ich habe versucht, es zu testen, aber ich habe Version 2.0.7 anstelle von 2.1.2 (cdnjs.com hat nicht die neueste Version) und deshalb habe ich Ihre Bearbeitung zurückgesetzt. Nachdem ich tiefer geforscht habe, wurde mir klar, dass es etwas mit Version 2.1 zu tun hat und ich habe deinen Schnitt ein wenig optimiert. Vielen Dank! –

Verwandte Themen