2010-09-26 14 views
8

Używam wtyczki jQuery Validation do sprawdzania poprawności formularza. Czy wiesz, jak wymusić rewalidację na wcześniej odnoszących sukcesy polach?jQuery Validation Plugin: Jak mogę wymusić walidację na wcześniej ważnych polach?

Próbowałem funkcję .form stosując następujący czek (ta jest wykonywana, gdy użytkownik kliknie „submit”):

if ($('#form1').validate().form()==false) 
{ 
    formValid = false; 
} 

Jednak wydaje się, że powyższy kod nie wznawia więc walidacji pól są już pomyślnie zatwierdzone (tzn. mają zaznaczenie obok) nie są ponownie sprawdzane.

Powodem, dla którego chce się ponowić próbę rewalidacji na polach, które zakończyły się pomyślnie, jest to, że polegają one na zdalnej walidacji, a wynik (sukces lub niepowodzenie) może się zmienić między użytkownikiem opuszczającym pole, a kliknięciem przycisku Wyślij. (Dotyczy to pola "nazwa użytkownika").

W przypadku, gdy wpływa na odpowiedź, mam wiele formularzy do sprawdzenia (dla uproszczenia, w fragmencie kodu powyżej odnoszę się tylko do "# form1").

Dzięki z góry za wszelkie rady,

Rob

Odpowiedz

17

Stan walidacji dla pól oddalonych jest przechowywana przez $.data() z elementem, który chcesz zweryfikować, więc można użyć .removeData() wyczyścić, że obecnie .. .so to zmuszony revalidate:

$("#form1 :input").removeData("previousValue"); 
//now call .valid() 

zmusza to sprawdzić, czy wartość ta zmienia się (musimy revalidate) być true:

//This code is in the validation plugin for remote: 
var previous = this.previousValue(element); 
if (previous.old !== value) { //this is normally false, since it hasn't changed 

Jeśli istnieją tylko konkretne obszary, które wymagają ponownego sprawdzania, jak mówiłeś nazwę użytkownika, może chcesz zawęzić selektor $("#form1 :input") tylko te pola, które chcą, aby uczynić go nieco bardziej wydajny.

+0

Excellent - to czyści walidacji doskonale, dzięki Nick ... chociaż inny problem wyskoczyło! Ponieważ obecnie rewaliduję wszystkie formularze, pojawia się błąd w javascript: "Nie udało się załadować zasobu: anulowano". Problem występuje tylko wtedy, gdy mam wiele formularzy na stronie (która jest operacją sterowaną przez użytkownika, ponieważ formularze są tworzone dynamicznie). Jakieś sugestie? – Rob

+0

@Rob - Chciałbym wyczyścić tylko te opcje zdalne, to uratuje najwięcej bólów głowy, czy możesz to zrobić za pomocą selektora bardziej określonego niż powyżej? Ponownie sprawdzę tylko ten, który przesyłasz. –

+0

z niektórych debugowania okazuje się, że błąd "Nie można załadować zasobu" ma miejsce, gdy .validate(). Form() jest wywoływana jednocześnie dla dwóch wejść formularza o tej samej nazwie. Muszę sprawdzić wszystkie dane wejściowe po przesłaniu, aby nawet posiadanie najbardziej konkretnego selektora nadal powodowało problem. Błąd nie występuje, jeśli wywołuję .validate(). Form() ręcznie w każdym formularzu sekwencyjnie z akcją sterowaną przez użytkownika (np. Klikając przycisk "sprawdzania poprawności") ... więc wydaje się, że muszę potwierdzić formularz w sekwencji (tylko wywołać sprawdzanie poprawności następnego formularza po pomyślnym zatwierdzeniu pierwszego) ... Jakieś sugestie? – Rob

Powiązane problemy