jQuery Validate-Włącz walidację ukrytych pól

W nowej wersji jQuery validation plugin 1.9 domyślnie Walidacja ukrytych pól ignorowanych. Używam CKEditor dla pola wprowadzania textarea i ukrywa pole i zastąp je iframe. Pole tam jest, ale Walidacja wyłączona dla ukrytych pól. Z validation plugin w wersji 1.8.1 wszystko działa zgodnie z oczekiwaniami.

Więc moje pytanie jest jak włączyć walidację dla ukrytych pól z v1. 9 validation plugin.

To ustawienie nie działa:

$.validator.setDefaults({ ignore: '' });
Author: Shaman, 2011-12-11

8 answers

Autor wtyczki mówi, że powinieneś użyć "nawiasy kwadratowe bez cudzysłowów", []

Http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

Release: Validation Plugin 1.9.0: "...Kolejna zmiana powinna sprawić, że konfiguracja formularzy z ukrytymi elementami łatwiej, są one teraz domyślnie ignorowane (opcja "Ignoruj" ma ": hidden " teraz jako domyślne). Teoretycznie może to złamać istniejące / align = "left" / W mało prawdopodobnym przypadku, że rzeczywiście tak jest, można to naprawić przez ustawienie opcji Ignoruj-na " [] "(nawiasy kwadratowe bez cytaty)."

Aby zmienić to ustawienie dla wszystkich form:

$.validator.setDefaults({ 
    ignore: [],
    // any other default options and/or rules
});

(nie jest wymagane, aby .setDefaults() było w obrębie document.ready funkcji)

Lub dla jednej konkretnej postaci:

$(document).ready(function() {

    $('#myform').validate({
        ignore: [],
        // any other options and/or rules
    });

});

EDIT :

Zobacz ta odpowiedź , aby dowiedzieć się, jak włączyć walidację na niektórych ukrytych polach, ale nadal ignorować inne.


Edytuj 2:

Przed pozostawieniem komentarzy, że "to nie działa" , należy pamiętać, że OP po prostu pyta o wtyczkę jQuery Validate i jego pytanie ma nic wspólnego z tym, jak ASP.NET, MVC lub jakikolwiek inny Microsoft framework może zmienić normalne oczekiwane zachowanie tej wtyczki. Jeśli używasz frameworka Microsoft, domyślne działanie wtyczki jQuery Validate jest nadpisane przez wtyczkę unobtrusive-validation firmy Microsoft.

Jeśli zmagasz się z plugin unobtrusive-validation, to proszę odnieść się do tej odpowiedzi zamiast: https://stackoverflow.com/a/11053251/594235

 287
Author: Sparky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:58

To zadziałało dla mnie, w ramach ASP.NET strona MVC3 gdzie zostawiłem framework do Ustawienia dyskretnej walidacji itp., na wypadek gdyby komuś się przydało:

$("form").data("validator").settings.ignore = "";
 66
Author: James Morcom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-15 15:01:58

Upewnij się, że umieścisz

 $.validator.setDefaults({ ignore: '' });

Nie wewnątrz $(document).ready

 62
Author: jerick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-30 09:27:17

Więc pójdę trochę głębiej do tego, dlaczego to nie działa, ponieważ jestem typem osoby, która nie może spać w nocy bez wiedzy haha. Używam jQuery validate 1.10 i Microsoft jQuery Unobtrusive Validation 2.0.20710.0, który został opublikowany 1/29/2013.

Zacząłem od poszukiwania metody setDefaults w jQuery Validate i znalazłem ją w linii 261 niezminifikowanego pliku. Wszystko, co ta funkcja naprawdę robi, to scalanie ustawień json z istniejącymi $.validator.defaults, które są inicjalizowana z właściwością ignoruj ustawioną na": hidden " wraz z innymi ustawieniami domyślnymi zdefiniowanymi w jQuery Validate. / Align = "left" / Teraz zobaczmy, gdzie ta domyślna właściwość jest odwoływana.

Kiedy prześledziłem kod, aby zobaczyć, gdzie $.validator.defaults jest odniesienie. Zauważyłem, że jest używany tylko przez konstruktor dla walidatora formularza, linii 170 w jQuery validate niezminifikowanego pliku.

// constructor for validator
$.validator = function( options, form ) {
    this.settings = $.extend( true, {}, $.validator.defaults, options );
    this.currentForm = form;
    this.init();
};

W tym momencie walidator połączy dowolne ustawienia domyślne, które zostały ustawione i dołączyć go do walidatora formularza. Gdy spojrzysz na kod, który wykonuje walidację, podświetlanie, unhighlighting itp., wszystkie używają walidatora.obiekt ustawienia, aby wyciągnąć właściwość ignoruj. Dlatego musimy się upewnić, że jeśli mamy ustawić ignorowanie za pomocą metody setDefaults, to musi ono wystąpić przed $("form").wywoływana jest metoda validate ().

Jeśli używasz Asp.net MVC i dyskretny plugin, wtedy zdasz sobie sprawę, Po spojrzeniu na javascript, który waliduje jest wywoływany w dokumencie.gotowy. nazwałem również moje ustawienia w dokumencie.gotowy blok, który będzie uruchamiany po skryptach, jQuery validate i dyskretny, ponieważ zdefiniowałem te skrypty w html przed tym, który ma wywołanie w nim. Więc moja rozmowa oczywiście nie miała wpływu na domyślną funkcjonalność pomijania ukrytych elementów podczas walidacji. Jest tu kilka opcji.

Wariant 1 - You could jako Juan Mellado wskazał mieć wezwanie poza dokumentem.gotowy, który zostanie uruchomiony zaraz po załadowaniu skryptu. Nie jestem pewien, co do czasu tego, ponieważ przeglądarki są teraz w stanie zrobić równoległe Ładowanie skryptów. Jeśli jestem zbyt ostrożny, popraw mnie. Poza tym pewnie są jakieś sposoby na obejście tego, ale dla moich potrzeb nie szedłem tą ścieżką.

Opcja 2a - W Moich Oczach bezpiecznym rozwiązaniem jest zastąpienie $.validator.setDefaults({ ignore: '' }); wewnątrz dokumentu.gotowe Zdarzenie z $("form").data("validator").settings.ignore = "";. Spowoduje to modyfikację właściwości ignoruj, która jest faktycznie używana przez jQuery validate podczas każdej walidacji elementów dla danego formularza.

Opcje 2b - po bliższym zapoznaniu się z kodem możesz również użyć $("form").validate().settings.ignore = ""; jako sposobu ustawienia właściwości ignore. Powodem jest to, że patrząc na funkcję validate sprawdza ona, czy obiekt validator został już zapisany dla elementu formularza za pomocą funkcji $.data(). Jeśli znajdzie obiekt walidatora przechowywany z element form wtedy po prostu zwraca obiekt validator zamiast tworzyć kolejny.

 26
Author: JustinMichaels,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 19:31:41

Właśnie dodałem ignore: [] na konkretnej stronie dla konkretnego formularza, To rozwiązanie zadziałało dla mnie.

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });
 8
Author: Kiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-27 05:24:39

To zadziałało dla mnie w ciągu ASP.NET miejscu. Aby włączyć walidację na niektórych ukrytych polach, użyj tego kodu

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

Aby włączyć walidację dla wszystkich elementów formularza użyj tego $("form").data("validator").settings.ignore = "";

Zwróć uwagę, że używaj ich w obrębie $(document).ready(function() { })

 6
Author: angela.mirjalili,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-10 06:19:33

To działa na mnie.

jQuery("#form_name").validate().settings.ignore = "";
 0
Author: Waqas Bukhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-16 02:32:02

Po prostu znajdź tekst ignoruj:": hidden" w pliku walidacji jquery i skomentuj go. Po tym komentarzu nigdy nie utraci żadnych ukrytych elementów do walidacji...

Thanks

 -12
Author: user835525,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 12:29:09