2010-04-14 16 views
11

Mój formularz HTML ma liczbę elementów div, które są krokami kreatora. Po kliknięciu przycisku "dalej" chcę sprawdzić tylko aktywny element div. Korzystam z wtyczki jQuery.Validate.js.Sprawdzanie poprawności podzbioru formularza za pomocą wtyczki jQuery Validate

Każdy div ma identyfikator, więc chcę to sposób powiedzieć coś takiego:

wizardForm.validate().element('#first-step :input') 

ale to tylko potwierdza pierwsze wejście, nie wszystkie z nich. Jak mogę sprawdzić wszystkie dane wejściowe w dziale div?

+0

Jest to przykład w jqueryvalidation.org/files/demo/multipart (obecnie podzielone na skutek do treści mieszanych). Jest to jednak specyficzne dla wymaganych pól. – TrueWill

Odpowiedz

24

Biorąc co sugeruje Jandy, stworzyłem tę funkcję pomocnika:

jQuery.validator.prototype.subset = function(container) { 
    var ok = true; 
    var self = this; 
    $(container).find(':input').each(function() { 
     if (!self.element($(this))) ok = false; 
    }); 
    return ok; 
} 

Wykorzystanie:

if (wizardForm.validate().subset('#first-step')) { 
    // go to next step 
} 
+0

Dobra odpowiedź. Myślę, że ta funkcjonalność powinna być natywna dla wtyczki. [This] (http://stackoverflow.com/questions/4625078/validate-different-fields-on-click-of-different-buttons-in-the-same-html-form-thr/5794770#5794770) jest rozwiązanie używane w moim projekcie (przed zobaczeniem tego) za pomocą opcji ignorowania i jquery: nie selektor –

+0

Działa to świetnie, ale jeśli nie chcę go używać, to nie "sprawdza poprawności. Co mam na myśli - jeśli użyję metody form.validate(). Podzbiór (". Container") w IF, to działa. Jeśli po prostu próbuję sprawdzić poprawność formularza form.validate(); - owinięte tym samym IF, to już nie działa. Każdy pomysł, dlaczego? Dziękujemy! – lehel

1

Próbowałem to rozwiązanie i to nie działa dla mnie. Oto jak osiągnąłem to samo zachowanie, używając wtyczki jquery.validation.

Walidator:

var form = $('#form'); 

    // init validator obj and set the rules 
    form.validate({ 
     errorElement: 'span', //default input error message container 
     errorClass: 'help-inline', // default input error message class 
     focusInvalid: false, // do not focus the last invalid input 
     ignore: "", 
     rules: { 
      // the rules, as usual 
     }, 

     highlight: function (element) { // hightlight error inputs 
      $(element).closest('.control-group').addClass('error'); // set error class to the control group 
     }, 

     unhighlight: function (element) { // revert the change dony by hightlight 
      $(element) 
       .closest('.control-group').removeClass('error'); // set error class to the control group 
     } 
    }); 

Korzystanie bootstrap form wizard.

ten sposób mogę zweryfikować każdym kroku:

$('#step :input').valid() 

działa jak czar.

+0

W jaki sposób sprawdza się część formularza? – Dementic

0

Jeśli spojrzeć na options for the validate() function jedną z opcji jest ignore, który domyślnie będzie zapobiegać walidator z przystąpieniem do sprawdzania żadnych pól, które pasują do CSS pseudo-klasy :hidden. Ta była wykorzystywana w połączeniu z FuelUX Wizard i był w stanie zapobiec kreatora z przejściem na następnym etapie następuje:

$('#wizard').wizard().on('change', function(event, info) { 
    if (! $('#wizard_form').valid()) event.preventDefault(); 
}); 
Powiązane problemy