Więc zamierzam głębiej zastanowić się, dlaczego to nie działa, ponieważ jestem osobą, która nie może spać w nocy bez znajomości haha. Używam jQuery validate 1.10 i Microsoft jQuery Unobtrusive Validation 2.0.20710.0, który został opublikowany 29.01.2013.
Zacząłem od wyszukania metody setDefaults w jQuery Validate i znalazłem ją w wierszu 261 niezminimalizowanego pliku. Wszystko, co naprawdę robi, to scalanie ustawień json z istniejącymi, $.validator.defaults
które są inicjowane z właściwością ignore ustawioną na „: hidden” wraz z innymi ustawieniami domyślnymi zdefiniowanymi w jQuery Validate. W tym momencie zastąpiliśmy ignorowanie. Zobaczmy teraz, do której strony odwołuje się ta domyślna właściwość.
Kiedy prześledziłem kod, aby zobaczyć, do kogo $.validator.defaults
się odwołuje. Zauważyłem, że jest używany tylko przez konstruktor do sprawdzania poprawności formularza, wiersz 170 w jQuery sprawdza poprawność nieuprawnionego pliku.
// constructor for validator
$.validator = function( options, form ) {
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
W tym momencie walidator scali wszelkie ustawienia domyślne, które zostały ustawione i dołącza je do walidatora formularza. Kiedy patrzysz na kod, który wykonuje sprawdzanie poprawności, wyróżnianie, odznaczanie itp., Wszyscy używają obiektu validator.settings, aby pobrać właściwość ignore. Musimy więc upewnić się, że jeśli mamy ustawić ignorowanie za pomocą metody setDefaults, to musi to nastąpić przed wywołaniem $ („form”). Validate ().
Jeśli używasz Asp.net MVC i dyskretnej wtyczki, po obejrzeniu javascript zrozumiesz, że sprawdzanie poprawności jest wywoływane w document.ready. Nazwałem też mój setDefaults w dokumencie. Blok, który będzie wykonywany po skryptach, sprawdzanie poprawności jquery i dyskretne, ponieważ zdefiniowałem te skrypty w html przed tym, w którym jest wywołanie. Moje połączenie oczywiście nie miało wpływu na domyślną funkcję pomijania ukrytych elementów podczas sprawdzania poprawności. Jest tu kilka opcji.
Opcja 1 - Możesz, jak zauważył Juan Mellado, mieć wywołanie poza dokumentem. Już to wykona się, gdy tylko skrypt zostanie załadowany. Nie jestem pewien co do czasu, ponieważ przeglądarki mogą teraz wykonywać równoległe ładowanie skryptów. Jeśli jestem zbyt ostrożny, popraw mnie. Są też prawdopodobnie sposoby na obejście tego, ale na moje potrzeby nie poszedłem tą ścieżką.
Opcja 2a - Bezpiecznym zakładem w moich oczach jest po prostu zastąpienie $.validator.setDefaults({ ignore: '' });
wnętrza dokumentu. Gotowym wydarzeniem $("form").data("validator").settings.ignore = "";
. Spowoduje to modyfikację właściwości ignorowania, która jest faktycznie używana przez sprawdzanie poprawności jQuery podczas wykonywania każdego sprawdzania poprawności elementów w danym formularzu.
Opcje 2b - po dokładniejszym zapoznaniu się z kodem można również użyć $("form").validate().settings.ignore = "";
jako sposobu ustawienia właściwości ignorowania. Powodem jest to, że patrząc na funkcję sprawdzania poprawności sprawdza, czy obiekt sprawdzania poprawności został już zapisany dla elementu formularza za pośrednictwem $.data()
funkcji. Jeśli znajdzie obiekt walidatora przechowywany z elementem formularza, wówczas po prostu zwróci obiekt walidatora zamiast tworzyć inny.