2012-07-18 104 views
9

我創建了自己的條件驗證屬性,通過繼承RequiredAttribute並實現IClientValidatable來驗證客戶端和服務器上的MVC模型。這個想法是,如果我的模型的布爾屬性是真的,那麼另一個屬性是必需的。在視圖這表現爲它決定一個文本框是否需要在要填充複選框如何使用不顯眼的jQuery驗證手動重新驗證/觸發驗證?

這完美的作品,除了當用戶執行以下操作爲:

  • 檢查的複選框(該字段爲現在需要)。
  • 提交表單(客戶端驗證運行,顯示錯誤消息)。
  • 用戶取消選中框(錯誤消息仍然存在,字段不再需要)。

我想重新驗證窗體,當複選框被選中或取消選中,或者甚至更好的只是重新驗證該字段,以便錯誤消息不再顯示。我嘗試過調用jQuery validate()方法的各種組合,但似乎沒有任何方法能夠重新運行驗證。

我使用下面的JavaScript來設置我的驗證功能和相關的不顯眼的適配器。

$.validator.addMethod(
    "requiredif", 
    function(value, element, parameters) { 
     var selector = "#" + parameters["dependentpropertyname"]; 
     var triggerValue = parameters["triggervalue"].toString().toLowerCase(); 
     var actualValue = $(selector).is(":checked").toString().toLowerCase(); 
     if (actualValue === triggerValue) return $.validator.methods.required.call(this, value, element, parameters); 

     return true; 
    }); 

$.validator.unobtrusive.adapters.add(
    "requiredif", 
    ["dependentpropertyname", "triggervalue"], 
    function(options) { 
     options.rules["requiredif"] = { 
      dependentpropertyname: options.params["dependentpropertyname"], 
      triggervalue: options.params["triggervalue"] 
     }; 
     options.messages["requiredif"] = options.message; 
    } 
); 

謝謝!

回答

-4

你應該檢查出Foolproof Validation。它可以做你正在試圖做的事情,而無需你自己推出。

+0

這看起來不錯!感謝您的鏈接,但我仍然有同樣的問題。即如何重新驗證/觸發客戶端上的全部或部分表單驗證? – andrej351 2012-07-18 23:09:52

+2

這不回答問題。 OP已經問過如何去皮和橙色,而你已經回答說你應該吃蘋果。可能是一個評論。 – Liam 2015-05-18 13:07:18

13

我有一個類似的問題,我想用jquery validate和jquery ui重新驗證datepicker字段。 This post幫我弄明白了。

關鍵是,只是爲該選擇器的有效方法添加一個回調。例如:

$(".requiredif").change(function() { 
    $(this).valid(); 
})