2010-05-17 10 views
46

Używam MVC do tworzenia formularzy generowanych w środowisku wykonawczym. Do sprawdzania poprawności, próbuję mojej strony w bibliotece sprawdzania poprawności jQuery, która jest bardzo wygodna w użyciu. Mam wyrażenie sprawdzania każdego pola w CDATA atrybut znacznikajQuery wyłącza sprawdzanie reguł dla pojedynczego pola

<input type="text" name="xyz" id="xyz" class="defaultTextBox" 
    cdata="{validate:{required:true, decimal:true, messages: 
      {required:'Please enter an decimal value', 
      decimal:'Please enter a valid decimal'}}}"> 

to działa pięknie. Teraz mam jeszcze jedno wymaganie, że niektóre pola są pokazywane i ukrywane zgodnie z logiką na stronie i muszę wyłączyć sprawdzanie poprawności ukrytych pól, tak aby nie zakłócały one przesyłania formularza. Wystarczy przełączyć wymagane: true na false i back to true powinno wystarczyć. Tylko nie wiem jak.

Ktoś ma z tym jakieś doświadczenie?

Odpowiedz

72

Po prostu dodaj regułę ignorowania i zdefiniuj selektor. W tym przykładzie walidacja zignoruje wszystkie elementy, które mają class="ignore"

$("#myform").validate({ 
    ignore: ".ignore" 
}) 
+0

super .. to działało – shake

+33

Ostrzeżenie ! Domyślnie w 'jquery.validate.js' w konfiguracji' defaults' jest 'ignore:": hidden "', więc proponuję wstawić 'ignore:" .ignore,: hidden "' lub inaczej ukryte pola, które nie używany do sprawdzania poprawności nagle da ci błędy –

+1

Nieważne, wykonywałem go przed jquery.validate.js – Nilzor

6

Kontynuując odpowiedź Gabe, można również ustawić wartość jako domyślnie zignorować, więc nie trzeba ustawić go na każdym formularzu .

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

Należy również pamiętać, pole zignorować to selektor jQuery, która jest używana w funkcji jQuery not() więc każdy poprawny selektor może być wykorzystywany nie tylko proste zajęcia.

Zobacz także http://docs.jquery.com/Plugins/Validation/validate#toptions Szczegółowe informacje na temat innych wartości domyślnych, które można ustawić.

30

Jeśli używasz poprawności ASP.NET MVC Dyskretna JQuery trzeba ustawić ustawienia w ten sposób. Dzieje się tak ze względu na sposób, w jaki Microsoft faktycznie nazywa walidację jQuery. To powinno być bezpieczne do wykonania w metodzie ready.

Edycja: Proszę zobaczyć komentarz Cory w poniższej przed kopiowaniem wklejanie tego. To jest mój oryginalny kod

$("form").data("validator").settings.ignore = ".data-val-ignore, :hidden, :disabled"; 

Potem wystarczy zastosować .data-val-ignore klasę rzeczy nie do sprawdzenia poprawności.

Zauważ, że prawdopodobnie będziesz chciał dodać :hidden, który jest w rzeczywistości domyślnym zachowaniem ignorowania zdefiniowanym w jquery.validate.js. Lubię też dodać :disabled.

$.extend($.validator, { 
defaults: { 
    messages: {}, 
    groups: {}, 
    rules: {}, 
    errorClass: "error", 
    validClass: "valid", 
    errorElement: "label", 
    focusInvalid: true, 
    errorContainer: $([]), 
    errorLabelContainer: $([]), 
    onsubmit: true, 
    ignore: ":hidden",    // default for ignore in jquery.validate.js 
    ignoreTitle: false, 
    onfocusin: function(element, event) { 
     this.lastActive = element; 

I na koniec możesz go stylizować - szczególnie przydatny podczas debugowania.

.data-val-ignore 
{ 
    background: #eee; 
} 
+1

Dzięki za przykład MVC; dokładnie to, czego szukałem. –

+7

Wygląda na to, że sposób dostępu do ustawień zmienił się (przynajmniej w moim projekcie) i brzmi teraz: $ ("formularz"). Validate(). Settings.ignore - na wypadek, gdyby było to rozwiązanie dla każdego innego! –

+0

@CoryW. Naprawdę myślę, że powinieneś zmienić ten komentarz w odpowiedź! zaoszczędził mi tyle czasu. Żadne inne rozwiązanie nie działało dla mnie – Code

3

miałem lepszy czas z $('.multiselect').rules('remove');

w moim przypadku jakiegokolwiek powodu dodając .cancel lub .data-val-ignore zarówno $.validator.setDefaults i $('.multiselect') nie naprawić.

Próbowałem też

$('select[multiple][data-val]').removeAttr('data-val').removeAttr('data-val-number').addClass('data-val-ignore').validate({ ignore: "[multiple]" }); 
$.validator.setDefaults({ ignore: ":hidden,:disabled,.data-val-ignore" }); 
$('.multiselect').closest('form').data('validator').settings.ignore = ":hidden,:disabled,.data-val-ignore, .data-val-ignore *"; 
$('.multiselect').data('validator').settings.ignore = "[multiselect]" 

każdy z tych ...i ich kombinacji

mój jquery.validate.js był

/*! jQuery Validation Plugin - v1.11.0 - 2/4/2013 
* https://github.com/jzaefferer/jquery-validation 
* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT */ 

jquery został

jQuery JavaScript Biblioteka v1.9.1 - Data: 2013-2-4

Powiązane problemy