2011-07-03 3 views
5

Próbowałem uzyskać dobre rozwiązanie sprawdzania poprawności, które zadziała w mojej witrynie, ale mam problem z różnymi opcjami. Przeczytałem dokładnie te dokumenty i przejrzałem przykłady, ale nadal mam problemy.jQuery sprawdź poprawność wtyczki - opcja showErrors - błądContainer nie ukrywa/pokazuje

Mój formularz znajduje się w tabeli. Chcę, aby każdy wiersz miał pod nim własny wiersz błędu, który zwykle byłby ukryty, ale który byłby wyświetlany dla każdego wiersza.

następujące opcje ukrył i pokazał wiersze o błędach w porządku, ale komunikat o błędzie przedstawionego w każdym rzędzie błędu był cały połączeniem każdym komunikatem o błędzie:

$('#myform').validate({ 
    rules: { 
     firstName: "required", 
     lastName: "required" 
    }, 
    messages: { 
     firstName: "Enter your first name.", 
     lastName: "Enter your last name." 
    }, 
    errorContainer: '.errorRow', 
    errorLabelContainer: '.errorRow.appValueColumn', 
    errorPlacement: function(error, element) { 
     error.appendTo(element.parent().next()); 
    } 
}); 

więc próbowałem użyć opcji showErrors następująco :

$('#myform').validate({ 
     rules: { 
      firstName: "required", 
      lastName: "required" 
     }, 
     messages: { 
      firstName: "Enter your first name.", 
      lastName: "Enter your last name." 
     }, 
     errorContainer: '.errorRow', 
     errorContainer: '.errorRow.appValueColumn', 
     showErrors: function(errorMap, errorList) { 
     $.each(errorMap, function(key, value) { 
     $('#'+key).parent().next().children('.appValueColumn').html(errorMap[key]); 
}); 

Cóż, teraz błędy są oddzielone i przedstawione w odpowiednim miejscu, ale nie mogę uzyskać .errorRows pokazać. Co ja tu robię źle?

Dziękujemy

Odpowiedz

3

Jeśli spojrzeć na źródło pluginu walidacji metody showErrors, masz:

this.settings.showErrors 
      ? this.settings.showErrors.call(this, this.errorMap, this.errorList) 
      : this.defaultShowErrors(); 

Oznacza to, że jeśli zapewnić obsługi niestandardową dla tej metody, domyślny zachowanie nie jest wykonywane.

Państwo może albo this.defaultShowErrors call() na końcu programu obsługi własnych showErrors, które staną się:

showErrors: function(errorMap, errorList) { 
    $.each(errorMap, function(key, value) { 
     $('#'+key).parent().next().children('.appValueColumn') 
        .html(errorMap[key]); 
    }); 
    this.defaultShowErrors(); 
}); 

Nadzieja to pomaga!

+0

Śledziłem swój kod i stosowane do kopalni. Błąd przychodzi onclick submit, ale od czasu niektóre strony odświeża. Czy możesz sprawdzić, jaki błąd popełniam. fiddle link here: https://jsfiddle.net/locateganesh/we7rkrxk/1/ – locateganesh

+1

Cóż, patrząc na konsolę, widać, że jest wyjątek "Uncaught TypeError: this.defaultShowErrors nie jest funkcją". Tak jak mówię w poście 'this.defaultShowErrors()' powinno być wywołane na końcu niestandardowego programu obsługi "showErrors", ale w przykładzie kodu zostało ono zawarte w '$ .each()'! Dobry połów ;-) –

0

Upewnij użyć classname bez kropką na tych liniach:

errorContainer: 'errorRow', 
errorLabelContainer: 'errorRow appValueColumn',