2010-05-17 62 views
46

我正在使用MVC創建在運行時生成的表單。對於驗證,我正在嘗試使用非常方便的jQuery驗證庫。我有每個字段的CDATA驗證表達標籤jQuery禁用單個字段的規則驗證

<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'}}}"> 

這精美的作品的屬性。現在我需要的另一個要求是,根據頁面上的邏輯顯示和隱藏一些字段,並且我需要禁用對隱藏字段的驗證,以免它們干擾表單提交。只需切換所需的信息:真實到錯誤並回到真實就足夠了。只有我不知道如何。

任何人有任何經驗嗎?

回答

72

只需添加忽略規則並定義選擇器即可。 在這個例子中,驗證會忽略有class="ignore"

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

酷..它的工作 – shake 2010-05-17 22:59:01

+33

警告! 'defaults'配置中'jquery.validate.js'的默認值是'ignore:「:hidden」'所以我建議把'ignore:'.ignore,:hidden「'或其他隱藏的字段用於驗證忽然會給你的錯誤 – 2013-02-22 06:52:57

+1

沒關係,我在jquery.validate.js – Nilzor 2014-02-03 09:01:41

6

上Gabe的答案之後的所有元素,你也可以設置忽略值作爲默認的,所以你不必設置每個窗體上。

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

還要注意,忽略場是在jQuery的not()功能,使任何有效的選擇都可以使用,而不僅僅是簡單的類使用jQuery選擇。

另請參閱http://docs.jquery.com/Plugins/Validation/validate#toptions瞭解有關可以設置的其他默認值的詳細信息。

30

如果您使用ASP.NET MVC Unobtrusive JQuery驗證,您需要以這種方式設置設置。這是因爲Microsoft實際調用jQuery驗證的方式。在ready方法中這應該是安全的。

編輯:請複製粘貼前請參閱Cory的評論。這是我的原代碼

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

然後我申請.data-val-ignore類的東西不驗證。

請注意,您可能需要添加:hidden,這實際上是jquery.validate.js中定義的默認忽略行爲。我也想添加: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; 

最後你可能想要設計它 - 在調試時特別有用。

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

之前執行它感謝MVC的例子;正是我所期待的。 – 2013-03-07 22:31:27

+7

訪問設置的方式似乎已經改變(至少在我的項目中),現在是:$(「form」).validate()。settings.ignore - 以防萬一這是其他人的解決方案! – 2013-05-15 01:48:13

+0

@CoryW。我真的認爲你應該把這個評論變成一個答案!爲我節省了很多時間。沒有其他解決方案爲我工作 – Code 2017-01-19 11:24:57

3

我曾與$('.multiselect').rules('remove');

一個更好的時間在我的情況下,無論出於什麼原因將.cancel.data-val-ignore$.validator.setDefaults$('.multiselect')都沒有解決它。

我也試過

$('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]" 

每個那些...以及它們的組合

jquery.validate.js

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

:jQuery是

jQuery JavaScript庫v1.9.1的 - 日期:2013年2月4日