2014-07-02 8 views
7

Chcę, aby Pietruszka nie sprawdzała poprawności danych wejściowych, jeśli nie jest widoczna. Mam dużą wieloetapową ankietę, która pokazuje nowe sekcje podczas jej wypełniania. Każda sekcja znajduje się w osobnym tagu, a w każdej z nich mogę mieć wiele sekcji, które się ujawniają podczas jej przechodzenia. Obecnie używam 1.x, a to w jaki sposób mogę to zrobić teraz:Parsley JS 2.x - wyłączenie sprawdzania poprawności dla pól, które nie są widoczne

$('#' + 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; 
       } 
      } 

Jest w sekcji słuchaczom, że mogę tylko potwierdzić pola, które są widoczne. Jak mogę to zrobić w Pietruszka 2.x? Przechodzę przez dokumentację i nie mogę znaleźć równoważnego sposobu robienia tego. Wiem, że są grupy sprawdzania poprawności w wersji 2.x, ale czy istnieje sposób, aby po prostu zrobić to tak, jak zrobiłem to w 1.x?

Odpowiedz

11

Najprostszym rozwiązaniem jest, aby wykluczyć wszystkie ukryte wejścia, tak:

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

ten sposób walidacji będą tylko wiązać widocznych wejść. Wymaga to jednak zniszczenia i zastosowania pietruszki za każdym razem, gdy dane wejściowe zmieniają jej widoczność.

Aby tego uniknąć, można użyć następującego "niezbyt eleganckiego" rozwiązania. Ten kod byłby lepszy w zdarzeniu "pietruszka: pole: sprawdzanie poprawności", ale nie mogłem go uruchomić.

Po zastosowaniu "pietruszki: pole: zwalidowane", sprawdzanie poprawności zostało już wykonane i teraz zmienimy wynik sprawdzania poprawności na true i ukrywamy kontener błędu. .

$('#' + 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; 
    } 
}); 

Jak Pietruszka 2.1 * zdarzenie parsley:field:validated rzuca się następujący komunikat

moduł PubSub pietruszka jest nieaktualna; użyj odpowiedniej metody zdarzenia jQuery zamiast

Zamiast parsley:field:validated należy użyć zdarzenia field:validated


Najnowsze wersje mają $.listen() przestarzała. Zamiast tego należy użyć wartości Parsley.on(). Przykład:

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

Świetna odpowiedź, zaoszczędziła mi sporo czasu. Myślę, że to całkiem eleganckie, biorąc pod uwagę, że pracujesz nad wtyczką ... – ambe5960

+0

Dodałbym, że chcesz być ostrożny używając tego, ponieważ będziesz chciał wyczyścić instancje sprawdzania poprawności, jeśli przełączasz widoczność ukrytych pól (pól) z powrotem do widocznego. – ambe5960

+0

@Potherca: dzięki za twoją aktualizację. Próbowałem go przetestować, ale używałem wersji 2.0.7 zamiast wersji 2.1.2 (cdnjs.com nie ma najnowszej wersji) i dlatego wycofałem twoją edycję. Po głębszym wykopaniu zdałem sobie sprawę, że ma to coś wspólnego z wersją 2.1, a ja nieco zmodyfikowałem twoją edycję. Dzięki! –