2011-10-06 97 views
6

這裏的用例:MVC3 unobtrusive驗證:如何從一組元素中刪除/重新驗證驗證?

我有這個長的形式,只有當用戶在某個可見輸入中做出某種選擇時纔會變得可見。閱讀Brad Wilson關於該主題的文章我認爲jQuery.validator.unobtrusive.parse('。extra-data')其中.extra-data是隱藏div的類。沒有運氣,因爲第一次解析完成後數據已經存在。

所以在最後我想出了這個刪除的規則:

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { 
    var currentRules = $(item).rules('remove'); // Saving removed rules to a sorta dictionary 
    if (!$.isEmptyObject(currentRules)) { 
     removedRules[$(item).attr("name")] = currentRules; 
    } 
}); 

,這重新連接它們:

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { 
    if (!$.isEmptyObject(removedRules[$(item).attr('name')])) { 
     $(item).rules('add', removedRules[$(item).attr('name')]); 
    } 
}); 

問題是,感覺有點哈克,因爲我」 m逐字地通過每個字段刪除並重新附加這些驗證規則。我的問題是:沒有更直接的方法嗎?性能也是一個問題,在這些巨大的形式中,您可以感受到點擊和驗證運行之間的延遲。

+0

http://stackoverflow.com/questions/5104288/adding-validation-with-mvc-3-jquery-validator-in-execution-time –

回答

23

不要刪除並重新附加規則。只需disableenable輸入。已禁用的字段不參與驗證,也不會提交給服務器。

//disable inputs. No validation will occur on these 
$('.data-panel').find('input[type="text"], textarea, select').attr('disabled', 'disabled'); 

//enable inputs. Validation is re-enabled 
$('.data-panel').find('input[type="text"], textarea, select').removeAttr('disabled'); 
+0

我絕對喜歡你的解決方案比我的更多,感謝的人。 – JoseMarmolejos