Próbuję poprawnie sprawdzić poprawność i zresetować formularz. Sprawdzanie poprawności działa poprawnie - wymagane pola są pomyślnie monitorowane. Kiedy jednak przejdę do resetowania mojego formularza, widzę tylko czerwone tło dla danych wejściowych, a nie komunikaty sprawdzania poprawności.jQuery dyskretny formularz sprawdzania poprawności nie ukrywa komunikatów o błędach podczas resetowania formularza
Według jQuery validate documentation:
Przywraca wejściowe pola do ich pierwotnej wartości (wymaga wtyczki formularz), usuwa klas wskazujących nieprawidłowe elementy i ukrywa komunikaty o błędach.
Oto wszystkie informacje, które uważam za istotne dla problemu. Proszę dać mi znać, jeśli chciałbyś zobaczyć cokolwiek innego.
Oto jak generuję element DOM w moim modelu. Ten element wymaga sprawdzenia poprawności:
//Model.ascx
<div class="detailsRow required">
<%= Html.LabelFor(model => model.Site) %>
<%= Html.DropDownListFor(model => model.SelectedSiteID, new SelectList(Model.Site, "Key", "Value"))%>
<%= Html.ValidationMessageFor(model => model.SelectedSiteID)%>
</div>
//Model.cs
[DisplayName("Site")]
public List<KeyValuePair<int, string>> Site { get; set; }
[Range(0, int.MaxValue, ErrorMessage = "Site required")]
public int SelectedSiteID { get; set; }
Strona jest listą wyboru rozpoczynającą się od wartości -1. Każdy inny wybór jest ważny. W związku z tym potwierdzam w zakresie od 0 do maks.
ciągu w JavaScript, biegnę następujący kod przed moim formularzu, gdy użytkownik naciśnie „Wyślij” przycisk na formularzu:
var form = workflowDialogContent.find('form');
$.validator.unobtrusive.parse(form);
//Maintain a reference to the current formValidator to be able to reset.
var formValidator = $.data(form[0], 'validator');
if (form.valid()) {
}
Po naciśnięciu użytkownik złożyć formularz jest zatwierdzony i moja wiadomość walidacji jest wyświetlany, jeśli wybrana witryna ma wartość -1.
Teraz, gdy zmiana jest zmieniana, chcę zresetować mój formularz. Wziąłem tę logikę od: How to clear Jquery validation error messages?
$(window).on('change', '#SelectedSiteID', function() {
//Returns the formValidator we maintained a reference to.
var validator = WorkflowDialogBuilder.getCurrentFormValidator();
validator.resetForm();
//TODO: resetForm's documentation says that it hides the errors, but I did not experience this, so I am doing it manually.
//$('.field-validation-error').empty();
}
Jednak, kiedy uruchomić ten kod ... podświetlenie jest usuwana, ale komunikaty o błędach pozostanie. Jeśli zadzwonię do kodu komentarza - błędy sprawdzania poprawności są ukryte, ale nie pojawiają się ponownie przy następnym sprawdzeniu poprawności mojego formularza.
Po walidacji: Po wywołaniu resetForm:
Jakieś pomysły dlaczego miałbym być widząc takie zachowanie?
Aktualizacja: W pracy wokół następujący fragment kodu wydaje się robić właściwy clean-up:
$('.field-validation-error').empty();
Jeśli poprawnie przywołuję, sprawdzanie poprawności nie pokazuje i ukrywa komunikatów o błędach, ale po prostu dodaje tekst do zakresu, który jest zawsze widoczny. Aby ręczne rozwiązanie działało, po prostu zrób to samo i opróżnij ręcznie "błąd sprawdzania poprawności pola." Dlaczego nie działa po wyjęciu z pudełka, nie wiem ...:/ – Tallmaris
Dobry pomysł . Jest to wykonalne obejście, które rozwiązuje problem, ale pozostawi to otwarte na jakiś czas. Dziękuję Ci! –
Jeśli w sposób drastyczny ładujesz ten formularz okna dialogowego, przydatne może być to pytanie: http://stackoverflow.com/questions/4406291/jquery-validate-unobtrusive-not-working- with -dynamic-injected-elements –