2018年6月9日 星期六

[jQuery] validate.unobtrusive 驗證(3) 自訂驗證

jquery.validate、jquery.validate.unobtrusive 自訂驗證

基本

    $.validator.addMethod 和 $.validator.unobtrusive.adapters.add
    需要在載入 DOM 之前就先執行

下面的例子包括

    不額外傳入驗證條件
    傳入一個驗證條件
    傳入多個驗證條件

不額外傳入驗證條件(ex.自定用來比對的上限/下限值)的例子,本例中假設
欄位字元長度不能超過5

validator.addMethod() 裡的 stringlengthcheck 對應到 html tag 裡的 data-val-stringlengthcheck
  1. <head>
  2. <script>
  3. //stringlengthcheck 是在 html tag 中對應的 data-val-stringlengthcheck
  4. $.validator.addMethod('stringlengthcheck', function (value, element, params) {
  5. //假設驗證欄位不可大於5
  6. return value.length <= 5;
  7. });
  8. //因為沒有要多傳參數做判斷,所以在 adapters.add 中沒有特別處理
  9. //為了要做 unobtrusive 的設定
  10. $.validator.unobtrusive.adapters.add("stringlengthcheck", function (options) {
  11. options.rules["stringlengthcheck"] = {
  12. };
  13. options.messages["stringlengthcheck"] = options.message;
  14. });
  15. </script>
  16. </head>
  17. <body>
  18. <input type="text" value="" name="money" id="money" data-val="true" data-val-stringlengthcheck="字元長度限制" />
  19. <span data-valmsg-for="money" data-valmsg-replace="true"></span>
  20. </body>
傳入一個驗證條件
  1. <head>
  2. <script>
  3. //傳入一個額外驗證條件
  4. //data-val-stringlengthcheck="錯誤訊息" 會觸發驗證
  5. //$.validator.addMethod 的 stringlengthcheck 要對應到 html tag 的 data-val-stringlengthcheck
  6. $.validator.addMethod('stringlengthcheck', function (value, element, params)
  7. {
  8. //驗證條件,欄位內容長度需要小於
  9. return value.length <= params["myMaxValue"];
  10. });
  11. //$.validator.unobtrusive.adapters.add 的 ["myMaxValue"] 對應到 html tag 的 data-val-stringlengthcheck-myMaxValue
  12. $.validator.unobtrusive.adapters.add("stringlengthcheck", ["myMaxValue"], function (options)
  13. {
  14. //要指定參數,在 validator 裡才接的到
  15. options.rules["stringlengthcheck"] = {
  16. myMaxValue: options.params.myMaxValue
  17. };
  18. options.messages["stringlengthcheck"] = options.message;
  19. });
  20. </script>
  21. </head>
  22. <body>
  23. <input type="text" name="myValue1" id="myValue1"
  24. data-val="true"
  25. data-val-stringlengthcheck="超過上限"
  26. data-val-stringlengthcheck-myMaxValue=10 />
  27. <span data-valmsg-for="myValue1" data-valmsg-replace="true"></span>
  28. </body>
傳入多個驗證條件
  1. <head>
  2. <script>
  3. $.validator.addMethod('stringlengthcheck', function (value, element, params)
  4. {
  5. return value.length >= params["myValue1"] && value.length <= params["myValue2"];
  6. });
  7. //參數用 ["myValue1","myValue2"] 對應到 html tag 就是
  8. //data-val-stringlengthcheck-myValue1 和 data-val-stringlengthcheck-myValue2
  9. $.validator.unobtrusive.adapters.add("stringlengthcheck", ["myValue1","myValue2"], function (options)
  10. {
  11. var params ={
  12. myValue1: options.params.myValue1,
  13. myValue2: options.params.myValue2
  14. }
  15. options.rules["stringlengthcheck"] = params;
  16. options.messages["stringlengthcheck"] = options.message;
  17. });
  18. </script>
  19. </head>
  20. <body>
  21. <input type="text" value="" name="myValue" id="myValue" data-val="true"
  22. data-val-stringlengthcheck="超過上下限"
  23. data-val-stringlengthcheck-myValue1=1
  24. data-val-stringlengthcheck-myValue2=2 />
  25. <span data-valmsg-for="myValue" data-valmsg-replace="true"></span>
  26. </body>
  27.  

沒有留言:

張貼留言