2012-05-29 3 views
5

Das Produkt, für das ich arbeite, verwendet JQuery-Validierung mit MVC3 hinter den Kulissen. Ich habe ein Feld, das ich als nur lesen (abhängig davon, ob ein Dropdown-Wert> 0 ist) oder nicht.Wie kann ich die Jquery-Validierung in schreibgeschützten Feldern deaktivieren?

Der Trick besteht darin, dass dieses Feld erforderlich sein muss, wenn es nicht schreibgeschützt ist und ohne Lesen übergeben werden muss, unabhängig davon, ob es Daten enthält oder nicht.

Wie soll ich das machen?

Antwort

14
$.validator.setDefaults({ 
    ignore: ':hidden, [readonly=readonly]' 
}); 

Die Standardeinstellung für den ignore Parameter ist ":hidden". Indem Sie den Standardwert mithilfe des obigen Codes zurücksetzen, stellen Sie sicher, dass jquery validate weiterhin nicht auf ausgeblendete Formularelemente wirkt, sondern auch nicht auf Elemente mit einem readonly="readonly"-Attribut wirkt.

Antworten auf Kommentare

dass ungerade klingt, können Sie einen Code schreiben müssen, um weitere Hilfe zu erhalten. Eine Sache, die Sie könnten versuchen, die Validierungsfehler zu entfernen, ist das Formular manuell zu validieren, wenn Sie das Nur-Lese-Attribut wechseln, so etwas wie dies vielleicht:

$('#the_text_box').attr('readonly', 'readonly'); 
$.validator.setDefaults(':hidden'); 
$('form').valid(); 
$.validator.setDefaults(':hidden, [readonly=readonly]'); 

Sie könnten auch etwas ähnliches während der ersten Seite zu laden, den Zeitpunkt zu vermeiden Validierungsfehlermeldungen

+0

Vielen Dank, dies scheint den Trick zu tun, die Validierung der Client-Seite nicht die Seite abzulehnen. Zur gleichen Zeit jedoch, wenn ich die Seite zum ersten Mal lade, zeigen die Validatoren sofort die Nachricht an, dass sie für alle leeren, schreibgeschützten Felder ungültig sind. Außerdem scheint es die ungültige Einstellung nicht zu entfernen, wenn ich das Feld nur über JavaScript in den Nur-Lese-Modus ändere. Fehle ich etwas oder ist das nur etwas, das für die Umsetzung meines Produkts spezifisch ist? – Brisbe42

+0

Nur um zu erklären, was passiert ist, hat das für mich funktioniert - bis zu einem gewissen Punkt. Mein Code hatte einige versteckte Funktionen, die das Starten der Seite mit Validierungsfehlern, die bereits serverseitig angewendet wurden, veranlasste. Ich musste mit einer Lösung gehen, die diese Auswirkungen hatte. Das Valid() für die Elemente, kombiniert mit dem Umkehren des Nur-Lesen-Flags, arbeitete für die Client-seitige Validierung. Danke für die Hilfe! – Brisbe42